/*
     $Revision$
     $Id$
*/

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

function onChangeLocatie()
{
  // Met contactonly zijn de invoervelden geforceerde contactpersoon-suggest velden.
  // Als de contactpersonen afhankelijk zijn van de locatie moeten de velden leeg worden gemaakt als de locatie is gewijzigd.
  if (contactonly && bez_sel_contactpersoon == 2)
  { // Contactpersoon suggest velden leegmaken.
    var next_vis = $("#next_vis").val();
    for (var i = 1; i < next_vis; i++)
    { // Maak de contactpersoon en bedrijf suggestboxen leeg
      // setValue(key, txt, doonChange, checkExist, extraParam, lastTry)
      window["sgContactPerson" + i].setValue(-1, "", false, false, null, true);
      window["sgBedrijf" + i].setValue(-1, "", false, false, null, true);
    }
    // Als de locatie leeg is moeten de velden ook readonly gemaakt worden.
    // Invullen heeft dan geen zin omdat de velden toch weer leeg gemaakt worden als de locatie wordt ingvuld.
    if ($("#locatiekey").val() == -1)
    {
      $("input[name^='bez']").prop("disabled", true);
      $("input[name^='bed']").prop("disabled", true);
    }
    else
    {
      $("input[name^='bez']").prop("disabled", false);
      $("input[name^='bed']").prop("disabled", false);
    }
  }

  if ($("#locatiekey").val() == -1)
  { // Als suggest velden voor parkeertereinen dan deze leegmaken en checkboxvinkjes ook
    var next_vis = $("#next_vis").val();
    for (var i = 1; i < next_vis; i++)
    { // Maak de suggestboxen leeg
      // setValue(key, txt, doonChange, checkExist, extraParam, lastTry)
      if (psObject[i] && psObject[i].sgBld) // Bij nieuwe afspraken kan het zijn dat er geen parkeerplaats-suggest is
          psObject[i].sgBld.setValue(-1, "", false, false, null, true);
      // Maak de checkboxen leeg
      $("#prk" + i).prop("checked", false);
    }
  }

  $.getJSON("../alg/get_alg_info_ajax.asp",
            { req_info: "locatie_gebouwen",
              alg_locatie_key: $("#locatiekey").val()
            },
            changeLocatieCallback);
}

function changeLocatieCallback(data) {
  if (typeof sgBld != "undefined") {
    if (data.length == 1 && !sgBld.isReadOnly()) {
      sgBld.setValue(data[0].key, data[0].name);
    }
  } else {
    var init_act_key = $("#actie option:selected").val();
    fill_actie((data[0]?.key || -1), init_act_key);
  }
  onChangeAlg(2);
  onChangeGebouw();
  get_freeprk_info();
}

function process_gebouw_info(data, textStatus)
{
  if (textStatus == "success")
  {
    // save alternative free days for this building
    mld_vrije_dagen_alt = data.vrije_dagen.alt || [];
    $("#vrije_dagen_id").val( (data.vrije_dagen.id || "Default"));
    // save show/require info for the selected building
    $("#prktype").attr({toon_telefoon: data.alg_gebouw_toon_telefoon, toon_email: data.alg_gebouw_toon_email, toon_kenteken: data.alg_gebouw_toon_kenteken});
    $("#prktype").trigger("changed");
    get_freeprk_info();
    var init_act_key = $("#actie option:selected").val();
    fill_actie(data.alg_gebouw_key, init_act_key);
    // Kijk of de bezoekers begin en eindtijd aangepast dient te worden.
    var fromempty = timeBeginInitEmpty && $("#time_from_date_from").val() == ""? 1 : 0;
    var toempty = timeEindInitEmpty && $("#time_from_date_to").val() == ""? 1 : 0;
    if (data && bez_use_buildinghours && (data.gebouw_beginuur >= 0 || data.gebouw_einduur >= 0))
    { // Begin/eindtijd aanpassen
      var startTime = padout(Math.floor(data.gebouw_beginuur)) + ":" + padout((data.gebouw_beginuur - Math.floor(data.gebouw_beginuur)) * 60); // Formaat is "08:00".
      var endTime = padout(Math.floor(data.gebouw_einduur)) + ":" + padout((data.gebouw_einduur - Math.floor(data.gebouw_einduur)) * 60);      // Formaat is "18:00".
      if ($("#time_from_date_from").val() < startTime)
        fromempty = 1;
      if ($("#time_from_date_to").val() > endTime)
        toempty = 1;
    }
    else
    {
      var startTime = padout(Math.floor(vis_t1)) + ":" + padout((vis_t1 - Math.floor(vis_t1)) * 60);
      var endTime = padout(Math.floor(vis_t2)) + ":" + padout((vis_t2 - Math.floor(vis_t2)) * 60);
    }

    // Nu de beide calenders (date_from en date_to) vervangen.
    function loadDatefrom() {
      if ($("#date_from").length) // only if present ( = editable )
      {
        var autoopen = 0;
        if (typeof init_calendar_autoopen != "undefined" && init_calendar_autoopen)
        {
          init_calendar_autoopen = 0; // Alleen de eerste keer
          autoopen = 1;
        }

        // Ook de oude netjes opruimen
        if ($("#show_date_from").hasClass("hasDatepicker"))
        {
          $("#show_date_from").datepicker("hide");
          $("#show_date_from").datepicker("destroy");
        }
        $("#show_date_from").closest("td").load("../Shared/loadCalendar.asp"
                                                + "?cal_id=date_from"
                                                + "&datum=" + $("#date_from").val()
                                                + (maxPast? "&maxPast=" + maxPast : "")
                                                + (maxFuture? "&maxFuture=" + maxFuture : "")
                                                + "&onChangeCode=2" // get_freeprk_info()
                                                + "&calendars=" + (afspr_key < 0? 2 : 1)
                                                + "&autoopen=" + autoopen
                                                + "&selectableDays=" + cal_selectableDays,
                                                + "&initTimeEmpty=" + fromempty
                                                + "&initEmpty=" + ($("#date_from").val() == "" ? 1 : 0)
                                                + "&timeField=1"
                                                + "&timeStep=" + (vis_h * 60)
                                                + "&startTime=" + startTime
                                                + "&endTime=" + endTime
                                                + "&required=1"
                                                + "&volgnr=1",
                                                loadDateto
                                                );
      }
    }
    function loadDateto() {
      if ($("#date_to").length) // only if present ( = editable )
      {
        // Ook de oude netjes opruimen
        if ($("#date_to").hasClass("hasDatepicker"))
        {
          $("#date_to").datepicker("hide");
          $("#date_to").datepicker("destroy");
        }

        $("#show_date_to").closest("td").load("../Shared/loadCalendar.asp"
                                              + "?cal_id=date_to"
                                              + "&datum=" + $("#date_to").val()
                                              + (maxFuture? "&maxFuture=" + maxFuture : "")
                                              + "&onChangeCode=2" // get_freeprk_info()
                                              + "&initTimeEmpty=" + toempty
                                              + "&timeField=1"
                                              + "&timeStep=" + (vis_h * 60)
                                              + "&startTime=" + startTime
                                              + "&endTime=" + endTime
                                              + "&required=1"
                                              + "&volgnr=2"
                                              + "&hidden=" + (bez_multiday != 1? 1 : 0)
                                              );
      }
    }
    if ($("#date_from").length) // only if present ( = editable )
    {
      loadDatefrom(); // Includes load of date_to
    }
    else
    {
      loadDateto();
    }
    onChangeAlg(3);
  }
}

function onChangeGebouw()
{
  if ($("#gebouwkey").val() > 0)
  { // Een nieuw gebouw is geselecteerd.
    $.getJSON("../alg/get_alg_info_ajax.asp",
              { req_info: "alg_gebouw",
                alg_gebouw_key: $("#gebouwkey").val()
              },
              process_gebouw_info);
  }
  else
  {
    var data = { req_info: "bez_fields" };
    if ($("#locatiekey").val() > 0)
        data.loc_key = $("#locatiekey").val();
    $.getJSON("get_bez_info_ajax.asp", data, update_show_fields);
  }
}

function onChangeVerdieping()
{
  onChangeAlg(4);
}

function onChangeRuimte()
{
  onChangeAlg(5);
}

function changeName(p_key, txt)
{ // Change contact/aanvrager name
  if ((vis_afspraak_host_uses_keys & 1) == 1)
  { // fill host listbox with only the aanvrager
    sgPersonH.setValue(p_key, txt);
  }
  onChangeHost(p_key);
}

function fill_actie(alg_gebouw_key, init_act_key)
{
  $.getJSON("../bez/get_bez_info_ajax.asp"
           , { req_info: "actiegroep"
             , locatie_key: []
             , gebouw_key: [alg_gebouw_key]
             }
           , function (data) {
                  if (data.length > 0)
                  {
                    var sel = -1;
                    var def = -1;
                    var init_key = (init_act_key && init_act_key != -1 ? init_act_key : -1);
                    $("#actie").empty();
                    if (data.length > 1)
                        $("#actie").append($("<option>").val(-1).html(""));
                    for (var i=0; i< data.length; i++)
                    {
                      $("#actie").append($("<option>")
                                        .val(data[i].key)
                                        .html(data[i].omschr)
                                        );
                      if (data[i].key == init_key) sel = i+1;
                      if (data[i].isdefault == 1)  def = i+1;
                    }
                    // Zet de geselecteerde key of de default als selected.
                    sel = (sel > -1 ? sel : (def > -1 ? def : 0));
                    $("#actie option:eq("+sel+")").attr("selected", "selected");
                  }
             }
           );
}

// Process de data die van de Ajax terugkomt.
function process_host_info(data)
{
  if ((vis_afspraak_host_uses_keys & 1) != 1)
  {
    var perslid_naam = data.prs_perslid_achternaam
                     + (data.prs_perslid_voorletters ? ", " + data.prs_perslid_voorletters : "")
                     + (data.prs_perslid_voornaam ? " ("+ data.prs_perslid_voornaam +")" : "");
    $("#personH").val(perslid_naam);
    var vullen = (vis_afspraak_tel_required & 2) == 0;
    $("#phone").val(vullen ? data.prs_perslid_telefoonnr : "");
  }

  if (vis_afspraak_onrgoed_uses_keys == 1)
  {
    if (!vis_fobo_default_locatie_empty) {
      plaatsselector.preferWerkplekken(data.werkplekken, data.standplaats); // Selecteert automatisch
    }
  }
  else
  {
    if (data.afleverruimte)
    {
      // setValue(key, txt, doonChange, checkExist, extraParam, lastTry)
      sgLoc.setValue(data.werkplekken[0].alg_locatie_key, data.werkplekken[0].alg_locatie_string, true, true, "", false);
      $("#room").val(data.afleverruimte);
    }
  }
};

function onChangeHost(perslid_key)
{
  if (perslid_key > 0)
  {
    $.getJSON("../prs/get_prs_info_ajax.asp?req_info=prs_perslid&prs_werkplek=1&prs_aflever=1&bezoekbaar=1&prs_perslid_key=" + perslid_key, process_host_info);
  }
}

function bez_submit_callback(json)
{
  if (json.success)
  {
      FcltMgr.closeDetail(window, json);
  }
  else
      iface.button.enable("btn_bez_submit");
}

async function bez_submit()
{
  if (!await validateForm("u2", {checklength: true}))
    return false;

  var dt = new Date(parseInt($("#date_from").val(), 10));
  var dt2 = new Date(parseInt($("#date_to").val(), 10));

  if (dt > dt2)
  {
    FcltMgr.alert(L("lcl_vis_bad_period"));
    return false
  }
  else if (dt.getTime() == dt2.getTime()) // Datums vergelijken werkt niet. Aantal milliseconden since middennacht 01/01/1970 vergelijken.
  {
    FcltMgr.alert(L("lcl_vis_same_time"));
    return false;
  }

  var diff = dt2 - dt;
  var days = Math.floor(diff / (1000 * 60 * 60 * 24));

  var find = 0;
  var next_vis= $("#next_vis").val();

  for (var i = 1; i < next_vis; i++)
  {
    if (document.forms.u2["bez" + i])
      if (document.forms.u2["bez" + i].value != "")
        find++;
  }
  if (find == 0)
  {
    FcltMgr.alert(L("lcl_bez_geef_bezoeker"));
    return false;
  }

  var isHoliday = cal_isVrijeDag(dt);

  var weekday = dt.getDay();
  var wkday = ((weekday != 0) && (weekday != 6));
  var sunday = !wkday;

  // Een enkele dag in het weekend mag een bezoeker komen (weekendonce)
  // Maar niet een reeks die begint in het weekend
  if ((sunday || isHoliday) && days > 0)
  {
    FcltMgr.alert(L("lcl_holiday_not_ok_bes")); // Repeteren mag niet op een zaterdag, zondag of vrije dag
    return false;
  }

  $.post($("form[name=u2]")[0].action, $("[name=u2]").serialize(), FcltCallbackAndThenAlways(bez_submit_callback), "json");

  return true; // disable button
}

function import_visit()
{
  var url = "../bez/bez_import_bezoeker.asp?urole=" + urole;
  if ($("#anydone").length)
    url += "&novervang=1";

  FcltMgr.openModalDetail(url,
                          L("lcl_bez_import_lijst"),
                          { callback: ImportBezoekerSelected });
}

function ContactpersoonBedrijfSelected(cont_key, a, params)
{
  id_nr = params.suggestid.substr(3);

  let s = "load_kenmerk.asp?urole=" + urole
        + "&beznum=" + id_nr
        + "&cont_key=" + cont_key
        + "&requiredbyfield=bez" + id_nr
        + "&notr=1&flexend=" + parseInt(bez_max_flex_on_line, 10);
  $.get(s, {}, function(data) { bezUpsertInlineFlex(data, id_nr); });

  s = "load_kenmerk.asp?urole=" + urole
    + "&beznum=" + id_nr + "&cont_key=" + cont_key
    + "&requiredbyfield=bez" + id_nr
    + "&flexstart=" + (parseInt(bez_max_flex_on_line, 10) + 1);
  $("#bezFlexListB" + id_nr).load(s, function(txt)
                                    {
                                      FcltMgr.resized();
                                    });
}

function bezUpsertInlineFlex(data, rowNr)
{ // Vervangen van de flexkenmerken op de bezoekersregel.
  // Verwijderd de laatse td's (kenmerken) op de regel.
  for (var i = 0; i < bez_max_flex_on_line; i++)
  { // Aantal flexkenmerk kolommen = Totaal aantal kolommen - Aantal kolommen zonder de flex kenmerken.
    nr_flex = $("#trbez" + rowNr).find("td").length - aantal_std_td;
    // Verwijder de flexkenmerk kolommen
    for (var j = 0; j < nr_flex; j++)
      $("#trbez" + rowNr).find("td:last").remove();
  }

  // Hier voorkomen we dat de 'data'-string direct door jQuery als (mogelijk invalide) html geparsed wordt,
  // we zetten de string eerst in een <tr>, en parsen hem daarna, middels de $()-functie
  let $tempTable = $("<table id='temp_" + rowNr + "' class='hidden'><tr>" + data + "</tr></table>");
  // Nu kunnen we valide html in de DOM zetten, en dan zal een evt $(function() {}) ook uitgevoerd worden
  $("#trbez" + rowNr).append($tempTable.find("tr").contents());
  delete $tempTable; // Voorkom memory leak, de garbage disposal ruimt geen variabelen op met html die niet in de DOM zit
  FcltMgr.resized();
}

function processBezoeker(rowNr, data)
{
    if (data.prs_perslid_telefoonnummer || data.prs_perslid_mobiel)
        $("input#bezoeker_telefoon" + rowNr).val(data.prs_perslid_telefoonnummer || data.prs_perslid_mobiel);
    if (data.prs_perslid_email)
        $("input#bezoeker_email" + rowNr).val(data.prs_perslid_email);
}

function BezoekerSelected(data, orgData)
{
  var rowNr = orgData.rownr;
  $("#bez" + rowNr).val(data.naam.substr(0, 30));
  $("#bed" + rowNr).val((data.bedrijf||"").substr(0, 60));
  if (data.contkey)
    $("#contkey" + rowNr).val(data.contkey);

  if (data.prskey > 0)
  {
    $("#prskey" + rowNr).val(data.prskey);
    if (data.get_email)
    {
        $.getJSON("../prs/get_prs_info_ajax.asp",
              { req_info: "prs_perslid",
                prs_perslid_key: data.prskey
              },
              function (data) { return processBezoeker(rowNr, data) });
    }
  }

  if (data.contkey || data.prskey)
  {
    var s = "load_kenmerk.asp?urole=" + urole + "&beznum=" + rowNr
          + (data.contkey? "&cont_key=" + data.contkey : "")
          + (data.prskey? "&prs_key=" + data.prskey : "")
          + "&requiredbyfield=bez" + rowNr
          + "&notr=1&flexend=" + parseInt(bez_max_flex_on_line, 10);
    // Laden van de kenmerken op de bezoekersregel
    $.get(s, {}, function(data) { bezUpsertInlineFlex(data, rowNr); });

    var s = "load_kenmerk.asp?urole=" + urole + "&beznum=" + rowNr
          + (data.contkey? "&cont_key=" + data.contkey : "")
          + (data.prskey? "&prs_key=" + data.prskey : "")
          + "&requiredbyfield=bez" + rowNr
          + "&flexstart=" + (parseInt(bez_max_flex_on_line, 10) + 1);
    $("#bezFlexListB" + rowNr).load(s, function(txt)
                                      {
                                        FcltMgr.resized();
                                      });
  }
};

// Let op: next_vis bevat het aantal (html) regels in de tabel
//         doordat bij delete regels gehide'd worden kan dit dus
//         meer zijn dan het aantal zichtbare regels
async function ImportBezoekerSelected(data, orgData)
{
    var next_vis = $("#next_vis").val();
    var rowNr = 0;

    if (data.replace)
    { // Verwijder eerst bestaande bezoekers voordat de lijst opnieuw geimporteerd wordt.
      // Als er bezoekers waren gearriveerd was vervang niet mogelijk.
      while (rowNr < next_vis)
      {
        deleteVisit(rowNr);
        rowNr ++;
      }
      next_vis = $("#next_vis").val();
      rowNr = 0;
    }

    for (bez in data.bezoekers)
    {
      rowNr ++;
      // Zoek eerste vrije regel
      while ((rowNr < next_vis) &&
             ($("#bez_key" + rowNr).val() != "-1" ||
              $("#bez" + rowNr).val() != "" ||
              $("#bed" + rowNr).val() != ""
             )
            )
      {
        rowNr ++;
      }

      if (rowNr == next_vis) // extra regel nodig
      {
        more_visit(1);
        next_vis = $("#next_vis").val();
      }
      $("#bez" + rowNr).val(data.bezoekers[bez].naam).change();
      $("#bed" + rowNr).val((data.bezoekers[bez].bedrijf||"").substr(0, 60));

      // Build format string
      var formatstring = data.format;
      var columnArr = ["telefoon", "email", "kenteken", "flex"];  // Dit zijn de id-kolommen van data_colarr in bez_import_bezoeker.asp !

      formatstring = formatstring.split(";");

      for(var i = 0; i < formatstring.length - 1; i++)
      {
        if(formatstring[i] == columnArr[0])
        {
          $("input[name='bezoeker_telefoon" + rowNr + "']").val(data.bezoekers[bez].telefoon);
        }
        if(formatstring[i] == columnArr[1])
        {
          $("input[name='bezoeker_email" + rowNr + "']").val(data.bezoekers[bez].email);
        }
        if(formatstring[i] == columnArr[2])
        {
          $("input[name='bezoeker_kenteken" + rowNr + "']").val(data.bezoekers[bez].kenteken);
        }
        if(formatstring[i] == columnArr[3])
        {
          for (var flx = 0; flx < data.bezoekers[bez].flex.length; flx++)
          {
            var nr = data.bezoekers[bez].flex[flx].nr;
            switch (data.bezoekers[bez].flex[flx].ktype)
            {
              case "C": $("#flex" + rowNr + "_" + nr + "val").val(data.bezoekers[bez].flex[flx].value); break;
              case "N": $("#flex" + rowNr + "_" + nr + "val").val(data.bezoekers[bez].flex[flx].value); break;
              case "D": $("#flex" + rowNr + "_" + nr + "val").datepicker("setDate", data.bezoekers[bez].flex[flx].value); break;
              default:  break;
            }
          }
        }
      }
    }
    await validateForm("u2", {checklength: true});
};

function selectPerson(row)
{
  FcltMgr.openModalDetail("../bez/bez_select_bezoeker.asp?urole=" + urole + (bez_sel_contactpersoon == 2? "&loc_key=" + $("#locatiekey").val() : ""),
                          titel,
                          { callback: BezoekerSelected, rownr: row });
};

function showPerson(row)
{
  var contkey = $("#contkey" + row).val();
  if (contkey > 0)
      FcltMgr.openDetail("./appl/prs/prs_contactpersoon.asp?mode=viewUpdate&key=" + contkey, { reuse: true, titel: L("lcl_details") });
};

// Merk op dat bez_key multifunctioneel is
// >0: we zijn een bestaande afspraak/bezoeker aan het bewerken
// -1: het is een nieuwe regel die nog niet in de database is
// 0: het is een nieuwe regel die met het kruisje is weggehaald (hidden gemaakt)
// < -1: een bestaande afspraak/bezoeker die met het kruisje is weggehaald (hidden gemaakt)
function deleteVisit(row)
{
  var bez_key = $("#bez_key" + row);
  if (bez_key.val() == -1)
    bez_key.val(0);  // signal delete for new visitor
  else
    bez_key.val(-bez_key.val()); // signal delete
  var tr = $("#trbez" + row);
  tr.hide();
  // Haal de required class overal af als deze erop zit.
  $("#trbez" + row).find("*").removeClass("required")
  tr = $("#trbez" + row + "flex");
  tr.hide();
  // Haal de required class overal af als deze erop zit.
  $("#trbez" + row + "flex").find("*").removeClass("required")
  FcltMgr.resized();
}

function setPrk(id)
{
  if ($("#gebouwkey" + id).val() > -1)
    // Er is een gebouw/terrein geselecteerd
    $("#prk" + id).prop("checked", true);
  else
    // Er is geen gebouw/terrein geselecteerd
    $("#prk" + id).prop("checked", false);
  $("#gebouw" + id).change();
}


// Maak van alle invoervelden contactpersoon suggest velden.
// Is zo slim om velden die hij al eerder gedaan heeft over te slaan
function makeContactSuggest()
{
    $(function () {
        $("input.fld[id^=bez]:not([readonly])").each(function()
        {
            if ($(this).hasClass("suggest"))
                return;
            var rowNr = this.id.substring(3);
            window["sgContactPerson" + rowNr] =
              new Suggest({ objectName: "sgContactPerson" + rowNr,
                queryField: this,
                queryUrl: "../shared/suggest/SuggestContactpersoon.asp?zoekpers=1&zoekbedr=0",
                initKey: -1,
                keyField: $("#contkey" + rowNr)[0], //  of $("#prskey" + rowNr)
                highlightDescript: true,
                extraParamField: $("#bed" + rowNr)[0],
                initExtraParam: "",
                urlAdd: (bez_sel_contactpersoon == 2? [{urlParam: "loc_key", field: "locatiekey"}] : null) // Contactpersoon afhankelijk van locatie?
             });
        });
    });
    $(function () {
        $("input.fld[id^=bed]:not([readonly])").each(function()
        {
            if ($(this).hasClass("suggest"))
                return;
            var rowNr = this.id.substring(3);
            window["sgBedrijf" + rowNr] =
              new Suggest({ objectName: "sgBedrijf" + rowNr,
                queryField: this,
                queryUrl: "../shared/suggest/SuggestContactpersoon.asp?zoekpers=0&zoekbedr=1",
                initKey: -1,
                keyField: $("#contkey" + rowNr)[0], // !! Ook opslaan in contactpersoon dus!
                highlightDescript: true,
                extraParamField: $("#bez" + rowNr)[0],
                initExtraParam: "",
                urlAdd: (bez_sel_contactpersoon == 2? [{urlParam: "loc_key", field: "locatiekey"}] : null) // Contactpersoon afhankelijk van locatie?
              });
           $(this).before('<span title="'+L("lcl_bez_new_contact")+'" OnClick="makeContact('+rowNr+')">' + I("fa-plus") + '&nbsp;</span>');
        });
    })
}

function makeContactSelected(data, orgData)
{
    if (!data.cont_key)
        return;
    $("#bez" + orgData.rowNr).val(data.naam);
    $("#bed" + orgData.rowNr).val(data.bedrijf);
    $("#contkey" + orgData.rowNr).val(data.cont_key);
    ContactpersoonBedrijfSelected(data.cont_key, data.naam, { suggestid: "bez" + orgData.rowNr});
}

function makeContact(rowNr)
{
  var url = "../bez/bez_make_contact.asp";
  FcltMgr.openModalDetail(url,
                          L("lcl_bez_new_contact"),
                          { callback: makeContactSelected,
                            rowNr: rowNr });
}

function showFaq(faq_key)
{
  if (faq_key > 0)
    FcltMgr.openDetail("appl/fac/fac_faq.asp?urole=fe&faq_key=" + faq_key, L("lcl_faq_item"), {reuse: true});
}

function onChangeAlg(level)
{
    var alg = [];
    var loc = -1;
    var temp = "";
    switch (level) {
        case 5: temp = $("#ruimtekey").val();       if (temp && temp != -1) alg.push(temp);
        case 4: temp = $("#verdiepingkey").val();   if (temp && temp != -1) alg.push(temp);
        case 3: temp = $("#gebouwkey").val();       if (temp && temp != -1) alg.push(temp);
        case 2: temp = $("#locatiekey").val();      if (temp && temp != -1) loc = temp;
            break;
        default: return; // Error
    }
    if (  (level == 2 && loc && loc > 0)
       || (level > 2 && alg.length && alg.length <= (level - 2))
       )
    {
        $.getJSON( "./get_bez_info_ajax.asp"
                 , { req_info: "faq_info"
                   , loc_key: loc
                   , alg_key_arr: alg.join(",")
                   , changed: level
                   }
                 , callback_faq_info
                 );
    }
    else
    {
        show_fixed_faq("bezFaq", level, {}, faq_max_results_bez);
    }
}
function findFilledLevel()
{
  var _level = 0;
  if (!!$("#locatie").val())    { _level = 2; } // location has a value
  if (!!$("#gebouw").val())     { _level = 3; } // building has a value
  if (!!$("#verdieping").val()) { _level = 4; } // floor has a value
  if (!!$("#ruimte").val())     { _level = 5; } // room has a value
  return _level;
}
function levelHasValue(level)
{
  switch (level) {
    case 5: return $("#ruimtekey").val();
    case 4: return $("#verdiepingkey").val();
    case 3: return $("#gebouwkey").val();
    case 2: return $("#locatiekey").val();
    default: return undefined;
  }
}

var faq_info_timer;
var cleared = null;
function callback_faq_info(data)
{
  if (data.popup_faq) // && !fromkb)
  { // Een vertraging om bij meerdere callbacks achter elkaar alleen de laatste uit te voeren.
    if (window.faq_info_timer) {
      clearTimeout(window.faq_info_timer);
    }
    if (data.changed > 1) {
      if (!window.cleared || window.cleared == 1) {
        cleared += 2; // Plaats
      }
    }
    window.faq_info_timer = setTimeout(callback_faq_info_once.bind(null, data), 1500);
  }
  else
  {
    show_fixed_faq("bezFaq", data.changed, data.fixed_faq, faq_max_results_bez);
  }
}

function callback_faq_info_once(data)
{
  var filledlevel = findFilledLevel();

  if (data.changed < 5 || requiredlevel <= filledlevel)
  {
      var url = "../bez/bez_faq.asp"
              + "?loc_key=" + data.loc_key
              + "&alg_key_arr=" + data.alg_key_arr.join(",")
              + "&changed=" + data.changed;
      // Als dit de eerste en enige call naar bez_faq is, dan willen we alle kennisbankitems zien,
      // zo niet, dan alleen de items laten zien die gekoppeld zijn aan gewijzigde plaats.
      if (!window.cleared || window.cleared == 3) {
        url += "&showall=1";
      }
      FcltMgr.openModalDetail(url, L("lcl_bez_faq_stdmanswers"), { height: 200, width: 700, callback: bez_faq_list_callback } );
  }

  show_fixed_faq("bezFaq", data.changed, data.fixed_faq, faq_max_results_bez);
    window.cleared = null;
}

function bez_faq_list_callback(data)
{
  // data.accept zal in praktijk altijd true zijn. Zelf nu dicht.
  FcltMgr.closeDetail(window, { cancel: true } );
}
