<% /*
     $Revision$
     $Id$

     File:          persoonselector.inc
     Description:   Algemene interface functie om een personen suggestbox te maken
                    Deze moet je kunnen includen en aanroepen.
                    Resulteert dan uiteindelijk in een zichtbaar textveld aangemaakt die de persoonnaam bevat (persoonnaam veld)
                    en een hidden keyveld die de key van de persoon bevat (persoonkey veld).
                    Het persoonnaam veld heeft geen naam en wordt niet meegesubmit.
                    Het persoonkey veld heeft een naam en wordt meegesubmit.
                    Het resultaat heeft de vorm "[<td>label</td><td>]selectveld[</td>]"
    parameters:     fieldName:    veldnaam van het persoonkey veld. Dit veld wordt gesubmit.
                    objectName:   naam van het suggest object dat wordt aangemaakt.
                    params:       object met meegegeven parameters.
                                  perslidKey:         initiële key waarde van de persoon die ingevuld moet worden.
                                  label:              label dat voor het persoonnaam veld wordt weergegeven.
                                  filtercode:         extra filtercode voor de query die gebruikt wordt voor de suggest.
                                  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.
                                  isBad:              boolean die aangeeft dat het persoonnaam veld als ongeldig
                                                      en leeg weergegeven moet worden (true|false(default)).
                                  readonly:           geeft aan of het persoonnaam 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.
                                  suppressNoValues    Onderdrukt het veld helemaal indien er geen waarden zijn.
                                  noBad               Als perslid_key niet gevonden binnen filter dan veld leeglaten
                                                      (in plaats van standaard gedrag: naam wel opzoeken maar 'Bad' maken).
*/ %>

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

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

function FCLTpersoonselector(fieldName, objectName, params)
{
  if (params.suppressNoValues)
  { // Check of er wel waarden zijn.
    var filtClause = getFiltClausePersoon(params.filtercode, params);
    var extraInf = getExtraInfPersoon(params.extracode);
    sql = "SELECT " + S("prs_pers_string") + " naam"
        + extraInf.selectstr
        + " FROM prs_perslid p"
        + ", prs_v_afdeling d"
        + extraInf.fromstr
        + " WHERE p.prs_afdeling_key = d.prs_afdeling_key"
        + filtClause
        + extraInf.wherestr;
    var oRs = Oracle.Execute(sql);
    if (oRs.Eof)
      return; // Er zijn geen waarden
  }
  if (!(params.perslidKey && params.perslidKey > 0) && params.readonly && params.suppressEmpty) return;
  if (typeof params=="undefined") params = {};

  var lwhenEmpty = (params.whenEmpty != null ? params.whenEmpty :  (params.readonly ? L("lcl_select_readonly") : L("lcl_select_persoon")));
  var lperslidName = (device.test(device.supportsPlaceholder) ? "" : lwhenEmpty);

  var lextraInit = "";
  var isBad = false;
  if (params.perslidKey && params.perslidKey > 0)
  {
    //var filt_params = {};
    var filt_params = params // Bijvoorbeeld params.perslidKey ook meegeven aan getFiltClausePersoon. params.perslidKey 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 = getFiltClausePersoon(params.filtercode, filt_params);
    var extraInf = getExtraInfPersoon(params.extracode);
    // Is er een initiele waarde meegegeven? Zoek dan de omschrijving erbij

    sql = "SELECT " + S("prs_pers_string") + " naam"
        + extraInf.selectstr
        + " FROM prs_perslid p"
        + ", prs_v_afdeling d"
        + extraInf.fromstr
        + " WHERE p.prs_afdeling_key = d.prs_afdeling_key"
        + " AND p.prs_perslid_key = " + params.perslidKey
        + filtClause
        + extraInf.wherestr;
    var oRs = Oracle.Execute(sql);
    if (oRs.Eof) // Misschien (tegenwoordig) uit scope?
    {   // Probeer dan maar zonder extra 'where's
        isBad = true;
        sql = "SELECT " + S("prs_pers_string") + " naam"
        + extraInf.selectstr
        + " FROM prs_perslid p"
        + ", prs_v_afdeling d"
        + extraInf.fromstr
        + " WHERE p.prs_afdeling_key = d.prs_afdeling_key"
        + " AND p.prs_perslid_key = " + params.perslidKey;
        var oRs = Oracle.Execute(sql);
    }
    if (isBad && params.noBad)
    {
        isBad = false;
        params.perslidKey = -1;
    }
    else
    {
        lperslidName = oRs("naam").value;
        lextraInit = oRs("extra").value;
    }
    oRs.Close();
  }

  // Bouw de url voor de persoons query op
  var personQueryUrl = rooturl+"/appl/shared/suggest/SuggestPerslid.asp"
                     + ((typeof params.autlevel != "undefined")? "?autlevel=" + params.autlevel : "?autlevel=-1")
                     + (params.perslidKey>0? "&perslidKey=" + params.perslidKey : "") // Kan ook met urlAdd meegegeven worden
                     + (params.extracode? "&extracode=" + params.extracode : "")
                     + (params.filtercode? "&filtcode=" + params.filtercode : "")
                     + (params.disc_key? "&disc_key=" + params.disc_key : "");
  if (params.label)
  { %><tr <%=params.trclass?"class='"+params.trclass+"'":""%>>
    <td class="label"><label class='selector' for='<%=fieldName%>'><%=params.label%>:</label>
    <%=!params.readonly                    ? "<span class='labelextra'><i class='fa fa-user details' id='"+fieldName+"_caller' style='display:none' onmouseover='iface.showCaller(this)' onclick='iface.setCaller("+objectName+")'>&nbsp;</i>" : ""%>
    <%=!params.readonly && params.moreinfo ? "<i class='fa fa-info-circle details' alt='' onclick='iface.persoonDetails(\"" + fieldName + "\")'></i>" : ""%>
    <%=!params.readonly                    ? "</span>" : ""%>
    </td>
    <td>
<%
  }
  if (params.readonly) { %>
    <span id="<%=fieldName%>_show" class="readonly fldpers<%=params.moreinfo ? " details" : ""%>"
           <%=params.moreinfo ? " onclick='iface.persoonDetails(\"" + fieldName + "\", \"" + (params.info||"") + "\")'" : "" %>>
           <%=safe.html(lperslidName)%>
    </span>
<% } else { %>
    <input id="<%=fieldName%>_show" class="fldpers<%=params.required? " required" : ""%>" value="<%=safe.htmlattr(lperslidName)%>" placeholder="<%=lwhenEmpty%>"
           <%=params.onChange ? " sgonChange='" + params.onChange + "'" : ""%>>
<% } %>
    <input type="hidden" id="<%=fieldName%>" name="<%=fieldName%>" value="<%=params.perslidKey%>">
<%
    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">
  jQuery(document).ready( function()
      {
        <%=objectName%> = new Suggest(
              { objectName: "<%=objectName%>",
                queryField: $("#<%=fieldName%>_show")[0],
                queryUrl: "<%=personQueryUrl%>",
                icon: "fa-user",
                initKey: <%=params.perslidKey? params.perslidKey : -1%>,
                noJustOne: true, // Controleer niet of er maar één waarde is die geselecteerd moet worden.
                keyField: $("#<%=fieldName%>")[0]
                <%=params.urlAdd? ", urlAdd: " + urlAddTxt : ""%>
                <%=params.extraParamField? ", extraParamField: " + "$(\"#" + params.extraParamField + "\")[0]" + "": ""%>
                <%=params.extraParamField? ", initExtraParam: \"" + safe.jsstring("" + lextraInit) + "\"": ""%>
                <%=params.isBad? ", isBad: true": ""%>
                <%=params.readonly? ", fieldReadonly: true": ""%>
                 // ,highlightDescript: true
            });
          if (FcltMgr.getCaller())
          {
              $("#<%=fieldName%>_caller").show();
          }
          <% if (isBad) { %>
            <%=objectName%>.isBad();
        <% } %>
      });
</script>
<%
  }
}
%>