<% /*
     $Revision$
     $Id$

     File:          besitemselector.inc
     Description:   Algemene interface functie om een artikel (bestel item) suggestbox te maken

    parameters:     fieldName:    veldnaam van het key veld. Dit veld wordt gesubmit.
                    objectName:   naam van het suggest object dat wordt aangemaakt.
                    params:       object met meegegeven parameters.
                                  bessrtdeel_key:    initiële key waarde van het artikel (bestel item) die ingevuld moet worden.
                                  autfunctionKey:    verplicht fac_function_key
                                  label:             label dat voor het veld wordt weergegeven.
                                  filtercode:        extra filtercode voor de query die gebruikt wordt voor de suggest.
                                  onChange:          onchange op het textveld.
                                  extraParamField:   veldnaam voor een extra hidden parameter veld.
                                  isBad:             boolean die aangeeft dat het veld als ongeldig
                                                     en leeg weergegeven moet worden (true|false(default)).
                                  readonly:          geeft aan of het veld readonly weergegeven moet worden (true|false(default)).
*/ %>

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

function FCLTbesitemselector(fieldName, objectName, params)
{
  if (typeof params == "undefined") params = {};

  var lwhenEmpty = params.readonly ? "" : L("lcl_select_besitem");
  var lbesitemName = (device.test(device.supportsPlaceholder) ? "" : lwhenEmpty);

  var lextraInit = "";
  var filt_params = params; // params.artikelgroepKey kan ook meegegeven worden met urlAdd zodat de waarde uit een veld wordt gehaald
  if (params.urlAdd)
  {
    for (i in params.urlAdd)
    {
      if (params.urlAdd[i].init)
        filt_params[params.urlAdd[i].urlParam] = params.urlAdd[i].init;
    }
  }
  if (params.bessrtdeel_key && params.bessrtdeel_key > 0)
  {
    //var filtClause = getFiltClauseBesItem(params);
    //var extraInf = getExtraInfBesItem(params.extracode);

    sql = "SELECT " + lcl.xsql('bes_srtdeel_omschrijving', 'isd.bes_srtdeel_key')
        //+ extraInf
        + " FROM bes_srtdeel isd"
        + " WHERE isd.bes_srtdeel_verwijder IS NULL"
        + "   AND (bes_srtdeel_vervaldatum IS NULL"
        + "       OR bes_srtdeel_vervaldatum > SYSDATE)"
        + "   AND bes_srtdeel_key = " + params.bessrtdeel_key;
        //+ filtClause;

    var oRs = Oracle.Execute(sql);
    if (!oRs.eof)
    {
      lbesitemName = oRs("bes_srtdeel_omschrijving").value;
      //lextraInit = oRs("extra").value;
    }
    // TODO: dit gaat nog niet zo lekker; als ik binnen het kennelijk geldende filter geen Name kan vinden
    //       moet-ie dan bv bad worden getoond? Of wat?
  }
  else
  {
    //var filtClause = getFiltClauseBesItem(params);
    //var extraInf = getExtraInfBesItem(params.extracode);
    sql = "SELECT COUNT(*) aantal"
        + " FROM bes_srtdeel isd"
        + " WHERE isd.bes_srtdeel_verwijder IS NULL"
        + "   AND (bes_srtdeel_vervaldatum IS NULL"
        + "       OR bes_srtdeel_vervaldatum > SYSDATE)"
        + (params.artikelgroepKey
          ? " AND bsg.bes_srtgroep_key = " + params.artikelgroepKey
          : "");
        //+ filtClause;
    var oRs = Oracle.Execute(sql);
    // Als er maar één artikel (bestel item) is, dan deze selecteren.
    if (oRs("aantal").value == 1)
    {
      sql = "SELECT isd.bes_srtdeel_key"
          + ", " + lcl.xsql('bes_srtdeel_omschrijving', 'isd.bes_srtdeel_key')
          //+ extraInf
          + " FROM bes_srtdeel isd"
          + " WHERE isd.bes_srtdeel_verwijder IS NULL"
          + "   AND (bes_srtdeel_vervaldatum IS NULL"
          + "       OR bes_srtdeel_vervaldatum > SYSDATE)"
          + (params.artikelgroepKey
            ? " AND bsg.bes_srtgroep_key = " + params.artikelgroepKey
            : "");
            //+ filtClause;
      var oRs = Oracle.Execute(sql);
      lbesitemName = oRs("bes_srtdeel_omschrijving").value;
      //lextraInit = oRs("extra").value;
      params.bessrtdeel_key = oRs("bes_srtdeel_key").value;

    }
  }

  // Bouw de url voor de persoons query op
  var besitemQueryUrl = rooturl + "/appl/shared/suggest/SuggestBesItem.asp?a=1"
                      + (params.perslidKey? "&perslidKey=" + params.perslidKey : "") // Kan ook met urlAdd meegegeven worden
                      + (params.disc_key > 0? "&disc_key=" + params.disc_key : "")
                      + (params.filtercode? "&filtcode=" + params.filtercode : "");
  if (params.label)
  { %><tr>
    <td class="label">
      <label class="selector" for="<%=fieldName%>"><%=params.label%>:</label>
<%  if (params.favouritelist)
    { %>
      <span class="labelextra details" title="<%=L("lcl_bes_favour_title")%>" onclick="favouriteList()"><%=I('fa-star')%></span>
<%  } %>
    </td>
    <td>
<%
  } %>
  <nobr>
    <input id="<%=fieldName%>_show" class="fldbesitem<%=!params.readonly&&params.required? " required" : ""%>"
           value="<%=safe.htmlattr(lbesitemName)%>"  placeholder="<%=lwhenEmpty%>"
           <%=params.readonly? " readonly":""%>
           <%=params.onChange && !params.readonly? " sgonChange='" + params.onChange + "'":""%>>
    <input type="hidden" id="<%=fieldName%>" name="<%=fieldName%>" value="<%=params.bessrtdeel_key%>">
<%
    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)%>">
<%
    } %>
  </nobr>
<%

  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: "<%=besitemQueryUrl%>",
                                         initKey: <%=params.bessrtdeel_key? params.bessrtdeel_key : -1%>,
                                         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
                                       });
<%       // Indien veld dat meegegeven is met urlAdd niet aanwezig is, dan deze als hidden veld aanmaken en vullen met init waarde.
         // Beter is om dan de waarde van perslidKey gewoon als parameter mee te geven. Onderstaande code kan dan wellicht weer weg.
         if (params.urlAdd)
         {
           for (i in params.urlAdd)
           { %>
               if ($("#<%=params.urlAdd[i].field%>").length == 0)
                 $("#besitemfields").append('<input type="hidden" id="<%=params.urlAdd[i].field%>" name="<%=params.urlAdd[i].field%>" value="<%=safe.htmlattr(params.urlAdd[i].init)%>">');
<%         }
         } %>
       }
      );
    </script>
    <div id="besitemfields">
    </div>
<%
  }

  if (params.label)
  { %>
    </td></tr>
<%
  }
}
%>