/*
     $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)
      psObject[i].sgBld.setValue(-1, "", false, false, null, true);
      // Maak de checkboxen leeg
      $("#prk" + i).prop("checked", false);
    }
  }

  get_freeprk_info();
}

function process_gebouw_info(data, textStatus)
{
  if (textStatus == "success")
  { // 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 && (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.
    $("#show_date_from").closest("td").load("../Shared/loadCalendar.asp",
                                            { cal_id: "date_from",
                                              datum: $("#date_from").val(),
                                              maxPast  : maxPast,
                                              maxFuture: maxFuture,
                                              onChange: "get_freeprk_info();",
                                              calendars: (afspr_key < 0? 2 : 1),
                                              autoopen : 0,
                                              initTimeEmpty: fromempty,
                                              initEmpty: ($("#date_from").val() == "" ? 1 : 0),
                                              timeField: 1,
                                              timeStep: vis_h * 60,
                                              startTime: startTime,
                                              endTime: endTime,
                                              required: 1,
                                              volgnr: 1
                                            });
    $("#show_date_to").closest("td").load("../Shared/loadCalendar.asp",
                                          { cal_id: "date_to",
                                            datum: $("#date_to").val(),
                                            maxFuture: maxFuture,
                                            onChange: "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)
                                          });
  }
}

function onChangeGebouw()
{
  if ($("#gebouwkey").val() > 0 && bez_use_buildinghours == 1)
  { // Een nieuw gebouw is geselecteerd.
    // Gebouwtijden als tijdgrenzen van afspraken gebruiken.
    $.getJSON("../alg/get_alg_info_ajax.asp",
              { req_info: "alg_gebouw",
                alg_gebouw_key: $("#gebouwkey").val() },
              process_gebouw_info);
  }
}

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);
  }
  else
  {
    $("#personH").val(txt); // Tekstuele waarde overnemen
  }
  onChangeHost(p_key);
}

// Process de data die van de Ajax terugkomt.
function process_host_info(data)
{
  if (vis_afspraak_onrgoed_uses_keys == 1)
  {
    plaatsselector.preferWerkplekken(data.werkplekken); // 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, false, 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");
}

function bez_submit()
{
  if (!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 false;
}

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);
  var 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);
  $("#bezFlexListA" + id_nr).load(s, function(txt)
                                    {
                                      FcltMgr.resized();
                                    });
  var 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 bezFlexListACallbackJs(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();
  }

  // Nu de nieuwe flexkenmerken toevoegen.
  $("#trbez" + rowNr).append($("#bezFlexListA" + rowNr).html());
  $("#bezFlexListA" + rowNr).html("");  // <div> weer leegmaken anders zijn er dubbele velden.
  FcltMgr.resized();
}

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

  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
    // 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.
    $("#bezFlexListA" + rowNr).load(s, function(a){ return function() {bezFlexListACallbackJs(a);} }(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
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);
      $("#bed" + rowNr).val(data.bezoekers[bez].bedrijf);
      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;
        }
      }
    }
    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 });
};

// 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")
}

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);
}


// 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('<img src="../Pictures/instantadd.png" title="'+L("lcl_bez_new_contact")+'" OnClick="makeContact('+rowNr+')" style="cursor:pointer">');
        });
    })
}

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 });
}
