<% /*
     $Revision$
     $Id$

     File:          autorisatieelector.inc
     Description:   Algemene interface functie om een autorisatie suggestbox te maken
                    Deze moet je kunnen includen en aanroepen.
                    Resulteert dan uiteindelijk in een zichtbaar textveld aangemaakt die de autorisatiecode bevat (autorisatiecode veld)
                    en een hidden keyveld die de key van de autorisatiecode bevat (autorisatiekey veld).
                    Het autorisatiecode veld heeft geen naam en wordt niet meegesubmit.
                    Het autorisatiekey veld heeft een naam en wordt meegesubmit.
                    Het resultaat heeft de vorm "[<td>label</td><td>]selectveld[</td>]"
    parameters:     fieldName:    veldnaam van het autorisatiekey veld. Dit veld wordt gesubmit.
                    objectName:   naam van het suggest object dat wordt aangemaakt.
                    params:       object met meegegeven parameters.
                                  autorisatieKey:      initiële key waarde van de autorisatie die ingevuld moet worden.
                                  multitoggle:         Sta multi-toggle toe
                                  idadd:               Identieficatie verschil bij gebruik van meerdere autorisatieselectoren
                                  label:               label dat voor het autorisatienaam veld wordt weergegeven.
                                  filtercode:          extra filtercode voor de query die gebruikt wordt voor de suggest.
                                  startwithcode        Start omschrijving met de autorisatiecode (true|false).
                                  onChange:            onchange op het textveld.
                                  trclass:             wordt ook op de <tr> gezet.
                                  autlevel:            PRS autorisatie niveau voor de query die gebruikt wordt voor de suggest.
                                  extraParamField:     veldnaam voor een extra hidden parameter veld.
                                  extraParamValue:     Voegt een extra value parameter toe aan de waarde (<input>)
                                                       Initiële waarden voor de extra value parameters worden via de initiële query bepaald.
                                                       De parameter extraParamValueInit hoeft dan niet meegegeven te worden.
                                  isBad:               boolean die aangeeft dat het autorisatienaam veld als ongeldig
                                                       en leeg weergegeven moet worden (true|false(default)).
                                  readonly:            geeft aan of het autorisatienaam veld readonly weergegeven moet worden (true|false(default)).
                                  filtercode:          filtercode van extra filter clausule voor initiële waarde.
                                  moreinfo:            geeft een extra informatie button achter het label veld of achter de suggest als er geen label is.
                                                       Klikken hierop geeft informatie over de geselecteerde waarde.
                                  suppressEmpty        Onderdrukt het veld helemaal indien EN readonly EN leeg.
                                  noBad                Als autorisatieKey niet gevonden binnen filter dan veld leeglaten
                                                       (in plaats van standaard gedrag: naam wel opzoeken maar 'Bad' maken).
*/ %>

<!-- #include file="./Suggest/autorisatieFilter.inc" -->

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

function FCLTautorisatieselector(fieldName, objectName, params)
{
  if (typeof params == "undefined") params = {};
  var idadd = "";
  if (params.idadd)
    idadd = params.idadd;
  var isMobile = ("mobile" in params) ? params.mobile : (typeof mobile != "undefined");
  if (!(params.autorisatieKey && params.autorisatieKey > 0) && params.readonly && params.suppressEmpty) return;

  var lwhenEmpty = (params.whenEmpty != null ? params.whenEmpty :  (params.readonly ? L("lcl_select_readonly") : L("lcl_select_autorisatie")));
  var lautorisatieName = "";

  // FSN#41607: prevents urlAdd["disc_key"] from ending up in the queryUrl
  var urldiscKey = (params.disc_key && !isNaN(params.disc_key)) ? params.disc_key : false;

  if (params.extraParamValue)
  {
    var extraPV = params.extraParamValue.split(",");
  }

  var lextraInit = "";
  var isBad = false;
  if (params.autorisatieKey && params.autorisatieKey > 0)
  {
    var filt_params = params; // Bijvoorbeeld params.autorisatieKey ook meegeven aan getFiltClauseAutorisatie. params.autorisatieKey kan ook meegegeven worden met urlAdd zodat de waarde uit een veld wordt gehaald;
    if (params.urlAdd)
    {
      for (i in params.urlAdd)
      {
          filt_params[params.urlAdd[i].urlParam] = params.urlAdd[i].init;
      }
    }
    var filtClause = getFiltClauseAutorisatie(params.filtercode, filt_params);
    var extraInf = getExtraInfAutorisatie(params.extracode);
    // Is er een initiele waarde meegegeven? Zoek dan de omschrijving erbij

    sql = "SELECT"
        + (params.startwithcode
          ? "     f.fac_functie_code || ': ' || lcl.l(f.fac_functie_omschrijving, 1)"
          : "     lcl.l(f.fac_functie_omschrijving, 1) || ' (' || f.fac_functie_code || ')'")
          + " autorisatie"
        + "     , f.fac_functie_code"
        + extraInf.selectstr
        + " FROM fac_functie f"
        + extraInf.fromstr
        + " WHERE f.fac_functie_key = " + params.autorisatieKey
        + filtClause
        + extraInf.wherestr;
    var oRs = Oracle.Execute(sql);
    if (oRs.Eof) // Misschien (tegenwoordig) uit scope?
    { // Probeer dan maar zonder extra 'where's
      oRs.Close(); // close the recordset, oRs will be reused
      isBad = true;
      sql = "SELECT lcl.l(fac_functie_omschrijving, 1) || ' (' || fac_functie_code || ')' autorisatie"
          + "     , f.fac_functie_code"
          + extraInf.selectstr
          + " FROM fac_functie f"
          + extraInf.fromstr
          + " WHERE f.fac_functie_key = " + params.autorisatieKey
          + extraInf.wherestr;
      var oRs = Oracle.Execute(sql);
    }
    if (isBad && params.noBad)
    {
      isBad = false;
      params.autorisatieKey = -1;
    }
    else
    {
      lautorisatieName = oRs("autorisatie").Value;
      lextraInit = oRs("extra").Value;
      if (params.extraParamValue)
      {
        var extraPVI = [];
        for (var i = 0; i < extraPV.length; i++)
        {
          extraPVI[i] = oRs(extraPV[i].replace(/^\s+|\s+$/g,"")).Value; // Replace is for trim spaces.
        }
      }
    }
    oRs.Close();
  }

  // Bouw de url voor de Autorisaties query op
  var autorizationQueryUrl = rooturl + "/appl/shared/suggest/SuggestAutorisatie.asp"
                           + ((typeof params.autlevel != "undefined")? "?autlevel=" + params.autlevel : "?autlevel=-1")
                           + (params.autorisatieKey > 0? "&autorisatieKey=" + params.autorisatieKey : "") // Kan ook met urlAdd meegegeven worden
                           + (params.module? "&module=" + params.module : "")
                           + (params.extracode? "&extracode=" + params.extracode : "")
                           + (params.filtercode? "&filtcode=" + params.filtercode : "")
                           + ("&startwithcode=" + (params.startwithcode? 1 : 0))
                           + (params.extraParamValue? "&extraParamValue=" + params.extraParamValue : "")
                           + (urldiscKey? "&disc_key=" + urldiscKey : "");
  if (params.label)
  { %><tr <%=params.trclass?"class='" + params.trclass+"'":""%>>
    <td class="label"><label class='selector' for='<%=fieldName%>_show'><%=params.label%></label>
    <%=!params.readonly                    ? "<span class='labelextra'><span id='" + fieldName + "_caller' class='details' style='display:none' onmouseover='iface.showCaller(this)' onclick='iface.setCaller(" + objectName + ")'>" + I("fa-user") + "</span>" : ""%>
    <%=!params.readonly && params.moreinfo ? "<span class='details' onclick='iface.autorisatieDetails(\"" + fieldName + "\")'>" + I("fa-info-circle") + "</span>" : ""%>
    <%=!params.readonly                    ? "</span>" : ""%>
    </td>
    <td>
<%
  }
  if (params.multi)
  {
    params.onChange = "onChangeMultiAutorization"; // Je mag geen eigen onChange hebben
    params.required = false;                       // Multi mag altijd ook 0 zijn
  }

  if (params.readonly) { %>
    <span id="<%=fieldName%>_show" class="fld readonly<%=params.moreinfo ? " details" : ""%>"
           <%=params.moreinfo ? " onclick='iface.autorisatieDetails(\"" + fieldName + "\", \"" + (params.info||"") + "\")'" : "" %>>
           <%=safe.html(lautorisatieName)%>
    </span>
<% } else { %>
    <div<%=isMobile ? ' class="input-icon-wrapper"' : ''%>>
      <input id="<%=fieldName%>_show"
             class="fld<%=params.required? " required" : ""%><%=isMobile ? MOBILE_UI_CLASSES.input : ""%>"
             value="<%=safe.htmlattr(lautorisatieName)%>"
             placeholder="<%=safe.htmlattr(lwhenEmpty)%>"
             <%=params.onChange ? " sgonChange='" + params.onChange + "'" : ""%>
<%    if (params.extraParamValue)
      {
        for (var i = 0; i < extraPV.length; i++)
        { %>
          <%=" " + extraPV[i].replace(/^\s+|\s+$/g,"")%>="<%=safe.htmlattr(extraPVI && extraPVI[i]? extraPVI[i].toString().replace(/^\s+|\s+$/g,"") : "")%>" <% /* replace is for trim spaces */ %>
<%      }
      } /* LET OP DAT HTML-HAAKJE HIERACHTER */ %>>
    </div>
<%  } %>
    <input type="hidden" id="<%=fieldName%>" name="<%=fieldName%>" value="<%=params.autorisatieKey%>">
<%
    if (params.extraParamField)
    { /* het extra parameter veld wordt door suggest object gevuld */%>
      <input type="hidden" id="<%=params.extraParamField%>" name="<%=params.extraParamField%>" value="<%=safe.htmlattr(lextraInit)%>">
<%
    }
  if (params.label)
  { %>
    </td>
    </tr>
<%
  }
  if (!params.readonly)
  {
    if (params.urlAdd)
    {
      var urlAddTxt = "[";
      for (var i = 0; i < params.urlAdd.length; i++)
      {
        urlAddTxt += (i > 0? ", " : "") + "{ urlParam: \"" + params.urlAdd[i].urlParam + "\", field: \"" + params.urlAdd[i].field + "\" }";
      }
      urlAddTxt += "]"
    }
%>
<script type="text/javascript">
  $(function()
  {
    <%=objectName%><%=idadd%> = new Suggest(
          { objectName: "<%=objectName%><%=idadd%>",
            queryField: $("#<%=fieldName%>_show")[0],
            queryUrl: "<%=autorizationQueryUrl%>",
            icon: "fa-user-shield",
            initKey: <%=params.autorisatieKey? params.autorisatieKey : -1%>,
            noJustOne: true, // Controleer niet of er maar één waarde is die geselecteerd moet worden.
            keyField: $("#<%=fieldName%>")[0]
            <%=params.multitoggle? ", multitoggle: true" : ""%>
            <%=params.urlAdd? ", urlAdd: " + urlAddTxt : ""%>
            <%=params.extraParamField? ", extraParamField: " + "$(\"#" + params.extraParamField + "\")[0]": ""%>
            <%=params.extraParamField? ", initExtraParam: \"" + safe.jsstring("" + lextraInit) + "\"": ""%>
            <%=params.extraParamValue? ", extraParamValue: " + "\"" + params.extraParamValue + "\"": ""%>
            <%=params.isBad? ", isBad: true": ""%>
            <%=params.readonly? ", fieldReadonly: true": ""%>
        });
    if (FcltMgr.getCaller())
    {
      $("#<%=fieldName%>_caller").show();
    }
<%  if (isBad)
    { %>
      <%=objectName%><%=idadd%>.isBad();
<%  }
    if (params.hidden)
    { %>
      <%=objectName%><%=idadd%>.makeHidden();
<%  } %>
  });
<%  if (params.multi) { %>
    function onChangeMultiAutorization(key, naam)
    {
      if (key < 0)
        return;
      <%=objectName%>.setValue(-1, ""); // Wissen en zorgen dat hij in de volgende telling niet meekomt
      if ($("input[name=<%=fieldName%>][value=" + key + "]").length) // Hij is er al
        return;
      var inp = $("<input>").attr("type", "hidden").attr("name", "<%=fieldName%>").val(key);
      var td = $("<td>").text(naam).append(inp).prepend("<span onclick='$(this).closest(\"tr\").remove()'>" + I("fa-trash") + "</span> ");
      var tr = $("<tr><td></td></tr>").append(td);
      $("input#<%=fieldName%>_show").closest("tr").after(tr);
      FcltMgr.resized();
    }
<% } %>
</script>
<%
  }
}
%>