<% /*
     $Revision$
     $Id$

     File:          rapportselector.inc
     Description:   Algemen interface functie om een rapport suggestbox te maken
                    Deze moet je kunnen includen en aanroepen.
                    Resulteert dan uiteindelijk in een zichtbaar textveld aangemaakt die de rapporten bevat (rapportnaam veld)
                    en een hidden keyveld die de key van het rapport bevat (rapportkey veld).
                    Het rapportnaam veld heeft geen naam en wordt niet meegesubmit.
                    Het rapportkey veld heeft een naam en wordt meegesubmit.
                    Het resultaat heeft de vorm "[<td>label</td><td>]selectveld[</td>]"
    parameters:     fieldName:    veldnaam van het rapportkey veld. Dit veld wordt gesubmit.
                    objectName:   naam van het suggest object dat wordt aangemaakt.
                    params:       object met meegegeven parameters.
                                  rapportKey:        initiële key waarde van het rapport die ingevuld moet worden.
                                  label:             label dat voor het rapportnaam 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 rapport veld als ongeldig
                                                     en leeg weergegeven moet worden (true|false(default)).
                                  readonly:          geeft aan of het rapportnaam veld readonly weergegeven moet worden (true|false(default)).
                                  suppressEmpty:     niets tonen als suppressEmpty en readonly
*/ %>

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

function FCLTrapportselector(fieldName, objectName, params)
{
  if (typeof params == "undefined") params = {};
  if (!((params.rapportKey && params.rapportKey > 0) || (params.rapportViewName && params.rapportViewName != "")) && params.readonly && params.suppressEmpty) return;

  // Is er een initiele waarde meegegeven? Zoek dan de omschrijving erbij!
  var lrapportName = (params.whenEmpty != null ? params.whenEmpty :  (params.readonly ? L("lcl_select_readonly") : L("lcl_select_rapport")));
  var lextraInit = "";
  var tabelized = false;

  if ((params.rapportKey && params.rapportKey > 0) || (params.rapportViewName && params.rapportViewName != ""))
  {
    var sql = "SELECT fac_usrrap_key"
            + "     , " + lcl.xsqla("fac_usrrap_omschrijving", "fac_usrrap_key")
            + "     , fac_usrrap_info"
            + "     , fac_usrrap_view_name"
            + "     , fac_usrrap_autorefresh extra"
            + "     , fac_usrrap_functie"
            + "  FROM fac_usrrap"
            + " WHERE (fac_functie_key IS NULL"
            + "     OR fac_functie_key IN"
            + "             (SELECT fac_functie_key FROM fac_v_webgebruiker"
            + "                WHERE prs_perslid_key = " + user_key + "))"
            + (params.rapportKey && params.rapportKey > 0 // rapportKey of rapportViewName moet meegegeven zijn.
              ? " AND fac_usrrap_key = " + params.rapportKey
              : " AND UPPER(fac_usrrap_view_name) = " + safe.quoted_sql_upper(params.rapportViewName));
    var oRs = Oracle.Execute(sql);
    if (oRs.Eof)
    {
        __DoLog("Gebruiker " + user_key + " heeft geen rechten voor een deeplink naar dit rapport.", "#FFFF00");
        shared.simpel_page(L("lcl_no_auth"));
        Response.End();
    }
    lrapportName = oRs("fac_usrrap_omschrijving").value;
    lextraInit = oRs("extra").value;
    params.rapportKey = oRs("fac_usrrap_key").value;
    tabelized = (oRs("fac_usrrap_functie").value&8);
  }
  else
  {
    var sql = "SELECT COUNT(fac_usrrap_key) aantal"
            + "  FROM fac_usrrap"
            + " WHERE (fac_functie_key IS NULL"
            + "     OR fac_functie_key IN"
            + "             (SELECT fac_functie_key FROM fac_v_webgebruiker"
            + "                WHERE prs_perslid_key = " + user_key + "))"
            + (params.rapportKey > 0 // rapportKey of rapportViewName moet meegegeven zijn.
              ? " AND fac_usrrap_key = " + params.rapportKey
              : " AND UPPER(fac_usrrap_view_name) = " + safe.quoted_sql_upper(params.rapportViewName));
    var oRs = Oracle.Execute(sql);
    // Als er maar één rapport is, dan deze selecteren.
    if (oRs("aantal").value == 1)
    {
      sql = "SELECT fac_usrrap_key"
          + "     , " + lcl.xsqla("fac_usrrap_omschrijving", "fac_usrrap_key")
          + "     , fac_usrrap_info"
          + "     , fac_usrrap_view_name"
          + "     , fac_usrrap_autorefresh extra"
          + "     , fac_usrrap_functie"
          + "  FROM fac_usrrap"
          + " WHERE (fac_functie_key IS NULL"
          + "     OR fac_functie_key IN"
          + "             (SELECT fac_functie_key FROM fac_v_webgebruiker"
          + "                WHERE prs_perslid_key = " + user_key + "))"
          + (params.rapportKey > 0 // rapportKey of rapportViewName moet meegegeven zijn.
            ? " AND fac_usrrap_key = " + params.rapportKey
            : " AND UPPER(fac_usrrap_view_name) = " + safe.quoted_sql_upper(params.rapportViewName));
      var oRs = Oracle.Execute(sql);
      lrapportName = oRs("fac_usrrap_omschrijving").value;
      lextraInit = oRs("extra").value;
      params.rapportKey = oRs("fac_usrrap_key").value;
      tabelized = (oRs("fac_usrrap_functie").value&8);
    }
  }

  // Bouw de url voor de rapporten query op
  var rapportQueryUrl = rooturl+"/appl/shared/suggest/SuggestRapport.asp?a=1"
                           + (params.filtercode? "&filtcode=" + params.filtercode : "")
                           + (params.showall? "&showall=" + params.showall : "")
                           + (params.extracode? "&extracode=" + params.extracode : "")
                           + (params.fcode? "&fcode=" + params.fcode : "");
  if (params.label)
  { %><tr>
    <td class="label">
      <label for="<%=fieldName%>"><%=params.label%>:</label>
    </td>
    <td>
<%
  } %>
  <nobr>
    <input id="<%=fieldName%>_show" class="fldusrrap<%=!params.readonly&&params.required? " required" : ""%>" value="<%=safe.htmlattr(lrapportName+(tabelized?' #':''))%>"
           <%=params.readonly? " readonly" : ""%>
           <%=params.onChange && !params.readonly? " sgonChange='" + params.onChange + "'" : ""%>>
    <input type="hidden" id="<%=fieldName%>" name="<%=fieldName%>" value="<%=params.rapportKey%>">

<%  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.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: "<%=rapportQueryUrl%>",
                                         initKey: <%=params.rapportKey? params.rapportKey : -1%>,
                                         keyField: $("#<%=fieldName%>")[0],
                                         highlightDescript: true
                                         <%=params.urlAdd? ", urlAdd: " + urlAddTxt : ""%>
                                         <%=params.extraParamField? ", extraParamField: $(\"" + "#" + params.extraParamField + "\")[0]" : ""%>
                                         <%=params.extraParamField? ", initExtraParam: \"" + safe.jsstring("" + lextraInit) + "\"": ""%>
                                         <%=params.isBad? ", isBad: true": ""%>
                                         <%=params.readonly? ", fieldReadonly: true": ""%>
                                       });
       }
      )
    </script>
<%
  }
}
%>