/*
     $Revision$
     $Id$

     File:        bez.js
*/
var toon_telefoon, toon_email, toon_kenteken, toon, terrein_prk = {};
// show/hide and required/not required for telefoon/email/kenteken
function getToonInfo() {
  toon_telefoon = parseInt($("#prktype").attr("toon_telefoon"));
  toon_email    = parseInt($("#prktype").attr("toon_email"));
  toon_kenteken = parseInt($("#prktype").attr("toon_kenteken"));
}
// Check whether parking place is used in the selected table row
function parkingPlace($this)
{
  var $prkCheck = $("td div input[type=checkbox]", $this.closest("tr"));
  var $prkSelect = $("td div input[id^=gebouw].fld", $this.closest("tr"));
  return ($prkCheck.is(":visible") && $prkCheck.prop("checked") || $prkSelect.is(":visible") && $prkSelect.val() != "");
}
// Determine show and require properties of telefoon/email/kenteken fields in a table row selected by an .each()
function showRequire()
{
  var save_toon = toon;
  var $this = $(this);
  var $this_div = $this.closest("div");
  var $this_tr = $this.closest("tr");
  var $this_bez = $("td input[name^=bez]:first", $this_tr);
  var $prk_check = $("td div input[type=checkbox]", $this_tr);
  var $prk_select = $("td div input[id^=gebouw].fld", $this_tr);

  function _doUpdateToon(key)
  {
    if ($this_div.attr("name").indexOf("telefoon") != -1)
    {
      if (terrein_prk[key])
        toon = Math.max(terrein_prk[key].toon_telefoon, toon);
    }
    else if ($this_div.attr("name").indexOf("email") != -1)
    {
      if (terrein_prk[key])
        toon = Math.max(terrein_prk[key].toon_email, toon);
    }
    else if ($this_div.attr("name").indexOf("kenteken") != -1)
    {
      if (terrein_prk[key])
        toon = Math.max(terrein_prk[key].toon_kenteken, toon);
    }
  }

  var current_bld_key = $prk_select.attr("sgkey"); // Het (parkeer)terrein (kan in theorie ook een gebouw zijn)
  if ($prk_check.is(":visible") && $prk_check.prop("checked")) // Checkbox
  {
    current_bld_key = $("#prktype").data("parkeer_terrein");
    if (current_bld_key > 0)
      _doUpdateToon(current_bld_key);
  }
  else if ($prk_select.is(":visible") && current_bld_key > 0) // Suggest
  {
    _doUpdateToon(current_bld_key);
  }
  $this_div.toggle(toon > 0);
  if (toon == 0)
  {
    $this.val("");
  }
  // Set group (check) dependency for bezoeker, kenteken, email and telefoon
  //  by adding required10Sx class if applicable. The x is the row number taken from the bez column.
  // Telefoon/email/kenteken is only required if visitor is filled for the particular row
  $this.toggleClass($this_bez.attr("name").replace("bez", "required10S"), toon == 3 || (toon == 2 && parkingPlace($this)));
  $this.toggleClass("required", !!$this_bez.val() && (toon == 3 || (toon == 2 && parkingPlace($this))));
  // Make [parking place select] or [parking checkbox] group-required when "kenteken" has a value
  if ($this_div.attr("name").indexOf("kenteken") != -1)
  {
      var $prkCheck = $("td div input[type=checkbox]", $this_tr);
      if ($prkCheck.is(":visible"))
      {
          $prkCheck.toggleClass($this_bez.attr("name").replace("bez", "required10S"), $this.val() != "");
          if ($this.val() == "") // Dan mag ook de required er af, als die er al op zit
              $prkCheck.removeClass("required");
      }
      var $prkSelect = $("td div input[id^=gebouw].fld", $this_tr);
      if ($prkSelect.is(":visible"))
      {
          $prkSelect.toggleClass($this_bez.attr("name").replace("bez", "required10S"), $this.val() != "");
          if ($this.val() == "") // Dan mag ook de required er af, als die er al op zit
              $prkSelect.removeClass("required");
      }
  }
  toon = save_toon;
}
// Determine show and require properties of telefoon/email/kenteken fields for one selected table row
function showRequireOne($this)
{
  var $this_tr = $this.closest("tr");
  var $this_bez = $("td input[name^=bez]:first", $this_tr);

  var $prk_check = $("td div input[type=checkbox]", $this_tr);
  // LPNL#68932; 'Een kenteken zonder vinkje heeft geen waarde.' -> leegmaken
  if ($this.is($prk_check) && $prk_check.is(":visible") && !$prk_check.prop("checked"))
    $("td div[name=bezoeker_kenteken] input", $this_tr).val("");

  getToonInfo();
  toon = toon_telefoon;
  $("td div[name=bezoeker_telefoon] input", $this_tr).each(showRequire);
  toon = toon_email;
  $("td div[name=bezoeker_email] input", $this_tr).each(showRequire);
  toon = toon_kenteken;
  $("td div[name=bezoeker_kenteken] input", $this_tr).each(showRequire);
  $("th div[name=bezoeker_telefoon_th]").toggle($("td div[name=bezoeker_telefoon]:visible").length > 0);
  $("th div[name=bezoeker_email_th]").toggle($("td div[name=bezoeker_email]:visible").length > 0);
  $("th div[name=bezoeker_kenteken_th").toggle($("td div[name=bezoeker_kenteken]:visible").length > 0);
  if ($this_bez.length)
  {
    $this_bez.addClass($this_bez.attr("name").replace("bez", "required10S"));
    checkRequiredGroup($this_bez.attr("name").replace("bez", "10S"));
  }
}
function showRequireChange()
{
  showRequireOne($(this));
}
function showRequireEventhandler()
{
  $('td div input[type=checkbox], td div input[id^=gebouw].fld, td input[name^=bez]').off().on("change", showRequireChange);
}
// initial setting of show and require properties for all visitor table rows
function showRequireAll()
{
  getToonInfo();
  toon = toon_telefoon;
  $("div[name=bezoeker_telefoon]").toggle(toon_telefoon > 0);
  $("td div[name=bezoeker_telefoon] input").each(showRequire);
  toon = toon_email;
  $("div[name=bezoeker_email]").toggle(toon_email > 0);
  $("td div[name=bezoeker_email] input").each(showRequire);
  toon = toon_kenteken;
  $("div[name=bezoeker_kenteken]").toggle(toon_kenteken > 0);
  $("td div[name=bezoeker_kenteken] input").each(showRequire);
  $("th div[name=bezoeker_telefoon_th]").toggle($("td div[name=bezoeker_telefoon]:visible").length > 0);
  $("th div[name=bezoeker_email_th]").toggle($("td div[name=bezoeker_email]:visible").length > 0);
  $("th div[name=bezoeker_kenteken_th]").toggle($("td div[name=bezoeker_kenteken]:visible").length > 0);
  showRequireEventhandler();
}

function printBadge(pbez_key)
{    // Printen van de bezoekers badge
    FcltMgr.windowopen("bez_xml.asp?badge=1&bez_key=" + pbez_key, "", "resizable=0,scrollbars=0,menubar=0,width=500,height=400");
}

function bezPoolCallback(data, text)
{
  FcltMgr.openDetail("appl/bez/bez_afspraak.asp?urole=bo&res_key=" + data.res_key, L("lcl_add"));
}
function process_freeprk_info(data, textStatus)
{
  if (textStatus == "success")
  {
    if (data)
    {
      // Zet de <th> tekst goed;
      if (data.prk_vrij > 0)
      {
        $("#bezPrkFree").text("[" + data.prk_vrij + L("lcl_bez_vrije_plaatsen") + "]");
      }
      else
      {
        if (data.prk_array && data.prk_array.length == 0)
          // Geen parkeerterrein aanwezig
          $("#bezPrkFree").text("[" + L("lcl_bez_geen_aanwezig") + "]");
        else
          // Alle aanwezige parkeerterrein zijn bezet
          $("#bezPrkFree").text("[" + L("lcl_bez_vol") + "]");
      }

      // Dis-/enable de checkboxes (de suggests zijn gewoon leeg als er niets te kiezen valt)
      $('div[name^="selectprkdiv"] [type=checkbox][name^=prk]:not(:checked)').attr("disabled", !(data.prk_vrij > 0)); // Checkbox voor parkeerterrein

      // Zet de parkeerplaats-keuze velden goed (Checkbox / Suggest / Geen keuze);
      if (data.prk_array?.length == 1 && $("#gebouwkey").val() == data.prk_array[0].key) // We hebben 1 gebouw met parkeerplaatsen en die is ingevuld
      { // Checkboxen lopen synchroon met suggestboxen en zijn altijd goed gezet
        // Checkboxen tonen voor parkeerterrein
        $('div[name^="selectgebterdiv"]').css("display", "none");
        $('div[name^="selectprkdiv"]').css("display", "block");
        $('input[name^="prkselect"]').val("C");
        $("#prktype").val("C"); // Checkbox voor parkeerterrein
      }
      else if (data.prk_array?.length >= 1)
      { // Gebruik data om de suggest velden bij parkeerterrein te updaten.
        var next_vis = $("#next_vis").val();
        for (var i = 1; i < next_vis; i++)
        {
          // Was mijn [oude] checkbox aangevinkt? Dan wil ik vast een parkeerplaats -> Kies er automatisch vast 1;
          if ($("#prk" + i) && $("#prk" + i).prop("checked"))
          {
            // Vindt parkeerterrein voor nieuwe locatie (loc_key) of vernieuw de text van de geselecteerde parkeerterrein
            var usegebter = 0; // Selecteer standaard de eerste ook al is die vol
            for (var j = 0; j < data.prk_array.length; j++)
            {
              if (data.prk_array[j].key == $("#gebouwkey" + i).val())
              {
                usegebter = j; // Selecteer dezelfde parkeerterrein
                break;
              }
            }
            // Selecteer de eerste ook al is die vol
            psObject[i].sgBld.setValue(data.prk_array[usegebter].key, data.prk_array[usegebter].naam, false, false, null, true);
          }
        }
        // Suggestboxen tonen voor parkeerterrein
        $('div[name^="selectprkdiv"]').css("display", "none");
        $('div[name^="selectgebterdiv"]').css("display", "block");
        $('input[name^="prkselect"]').val("S");
        $("#prktype").val("S"); // Suggestbox voor parkeerterrein
      }
      else
      {
        // Geen vinkboxen en suggestboxen tonen voor parkeerterrein
        $('div[name^="selectprkdiv"]').css("display", "none");
        $('div[name^="selectgebterdiv"]').css("display", "none");
        $('input[name^="prkselect"]').val("");
        $("#prktype").val("N"); // Geen parkeerplaatsen/parkeerterrein reserveren
      }

      // Het terrein_prk object vullen.
      terrein_prk = {};
      update_terrein_prk(data.prk_array);

      showRequireAll();
    }
  }
  else
    FcltMgr.alert("process_freeprk_info: " + textStatus);

  if (data.init) {
    if (typeof onChangeGebouw === "function")
      onChangeGebouw();
    else if (typeof onChangeLocation === "function")
      onChangeLocation();
  }
}

// Dit object wordt gevuld zodat we naar deze instellingen kunnen kijken zodra deze parkeerplaats gekozen wordt
function update_terrein_prk(parkeer_terreinen)
{ // Dit kunnen in theorie overigens ook gebouwen zijn
  for (var i = 0; i < parkeer_terreinen.length; i++)
  {
    terrein_prk[parkeer_terreinen[i].key] = {
      toon_telefoon:  parkeer_terreinen[i].toon_telefoon,
      toon_email:     parkeer_terreinen[i].toon_email,
      toon_kenteken:  parkeer_terreinen[i].toon_kenteken
    };
  }
  // Voor de checkbox onToggle, de parkeerterrein-key hier opslaan
  if (parkeer_terreinen.length === 1 && $("#gebouwkey").val() == parkeer_terreinen[0].key) // We hebben 1 gebouw met parkeerplaatsen en die is ingevuld
    $("#prktype").data("parkeer_terrein", parkeer_terreinen[0].key);
}

function update_show_fields(bld_arr)
{
  var bez_fields = { toon_telefoon: 0, toon_email: 0, toon_kenteken: 0 };
  for (var i = 0; i < bld_arr.length; i++)
  {
    bez_fields.toon_telefoon = Math.max(bez_fields.toon_telefoon, bld_arr[i].toon_telefoon);
    bez_fields.toon_email    = Math.max(bez_fields.toon_email, bld_arr[i].toon_email);
    bez_fields.toon_kenteken = Math.max(bez_fields.toon_kenteken, bld_arr[i].toon_kenteken);
  }
  $("#prktype").attr(bez_fields);
  showRequireAll();
}

function get_freeprk_info(init)
{
  if (vis_parking_key != -1 && canWritePrk) // Parkeerterrein kolom is zichtbaar
  {
    var date_from = parseInt($("#date_from").val(), 10) || window.var_date_from?.getTime();
    var date_to = parseInt($("#date_to").val(), 10) || window.var_date_to?.getTime();


    if (date_from && date_to)
    {
      if (typeof bez_multiday !== "undefined" && bez_multiday != 1 && (new Date(date_from)).midnight() != (new Date(date_to)).midnight())
      { // De datum is verborgen en de tijd is zichtbaar. Datum date_to hetzelfde als datum date_from.
        date_to = new Date(date_to);
        date_to.setYear(new Date(date_from).getFullYear());
        date_to.setMonth(new Date(date_from).getMonth());
        date_to.setDate(new Date(date_from).getDate());

        // Maak einddatum gelijk aan begindatum.
        $("#show_date_to").datepicker('setDate', date_to);
        $("#show_date_to").val($("#show_date_from").val());
        date_to = date_to.getTime();
        $("#date_to").val(date_to);
      }

      // Bepaal aantal vrije parkeerterrein.
      $.getJSON("get_bez_info_ajax.asp",
                { req_info: "bez_freeprk",
                  loc_key: $("#locatiekey").val(),
                  date_from: date_from,
                  date_to: date_to,
                  init: init || 0
                },
                process_freeprk_info);
    }
    else
    {
      if (init) {
        if (typeof onChangeGebouw === "function")
          onChangeGebouw();
        else if (typeof onChangeLocation === "function")
          onChangeLocation();
      }
      $("#bezPrkFree").text("");
    }
  } // Als process_freeprk_info niet word uitgevoerd, moet alsnog onChangeGebouw worden uitgevoerd tijdens initialisatie (init)
  else if (init) {
    if (typeof onChangeGebouw === "function")
      onChangeGebouw();
    else if (typeof onChangeLocation === "function")
      onChangeLocation();
  }
}