<% /*
     $Revision$
     $Id$

     File:          objectselector.inc
     Description:   Algemene interface functie om een object suggestbox te maken
                    Deze moet je kunnen includen en aanroepen.
                    Resulteert dan uiteindelijk in een zichtbaar textveld aangemaakt die de objectnaam bevat (objectnaam veld)
                    en een hidden keyveld die de key van het object bevat (objectkey veld).
                    Het objectnaam veld heeft geen naam en wordt niet meegesubmit.
                    Het objectkey veld heeft een naam en wordt meegesubmit.
                    Het resultaat heeft de vorm "[<td>label</td><td>]selectveld[</td>]"
     parameters     fieldName:    veldnaam van het objectkey veld. Dit veld wordt gesubmit.
                    objectName:   naam van het suggest object dat wordt aangemaakt.
                    params:       object met meegegeven parameters.
                                  objectKey:         initiële key waarde van het object die ingevuld moet worden.
                                  label:             label dat voor het objectnaam veld wordt weergegeven.
                                  module:            "MLD" -> maakt gebruik van get_objecten_sql()
                                  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:          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 objectnaam veld als ongeldig
                                                     en leeg weergegeven moet worden (true|false(default)).
                                  readonly:          geeft aan of het object veld readonly weergegeven moet worden (true|false(default)).
                                  filtercode:        filtercode van extra filter clausule voor initiële waarde
                                  excludekey:        Object uitsluiten.
                                  inclComp:          Inclusief onderdelen.
                                  relate:            Toon objecten/onderdelen die gerelateerd kunnen worden. Voorkom van-naar lussen.
                                  moreinfo:          geeft een extra informatie button achter het suggest veld. Klikken hierop geeft informatie
                                                     over de geselecteerde waarde
*/ %>

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

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

function FCLTobjectselector(fieldName, objectName, params)
{
  if (typeof params == "undefined") params = {};
  var isMobile = ("mobile" in params) ? params.mobile : (typeof mobile != "undefined");

  // Is er een initiele waarde meegegeven? Zoek dan de omschrijving erbij!
  var lwhenEmpty = (params.whenEmpty != null ? params.whenEmpty :  (params.readonly ? L("lcl_select_readonly") : L("lcl_select_object")));
  var lobjectName = "";

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

  var lextraInit = "";
  if (params.objectKey && params.objectKey > 0)
  {
    var filtClause = getFiltClauseObject(params);
    var extraInf = getExtraInfObject(params.extracode);

    if (params.module == "MLD")
    {
      var plaatsaanduiding;
      var wpprefix;
      if (S("ins_element_description") == "")
      {
      var parentdeel = "CASE WHEN d.ins_deel_parent_key IS NOT NULL"
                     + "     THEN (SELECT p.ins_deel_omschrijving"
                     + "             FROM ins_deel p"
                     + "            WHERE p.ins_deel_key = d.ins_deel_parent_key"
                     + "          ) ||' / '"
                     + "     ELSE ''"
                     + "END ";
        wpprefix = S("prs_wpprefix_objectid") == 1;
        plaatsaanduiding = (wpprefix
                           ? " CASE"
                             + " WHEN d.ins_alg_ruimte_type = 'W' AND wp.prs_werkplek_omschrijving IS NOT NULL"
                             + " THEN ' ' || wp.prs_werkplek_omschrijving"
                             + " ELSE ''"
                             + " END"
                           : "''");
        plaatsaanduiding = ", " + parentdeel + "|| d.ins_deel_omschrijving || " + plaatsaanduiding
                         + " || ' (' || " + lcl.xsql("s.ins_srtdeel_omschrijving", "s.ins_srtdeel_key")
                         + " || ') ' || d.ins_deel_opmerking ";
      }
      else
      {
        plaatsaanduiding = ", " + S("ins_element_description");
      }
      sql = "SELECT 'dummy' extra"
          + plaatsaanduiding + " deel"
          + extraInf.selectstr
          + "  FROM ins_v_deelenonderdeel d"
          + "     , ins_srtdeel s"
          + "     , ins_srtgroep g"
          + "     , ins_tab_discipline dis"
          + (wpprefix ? "     , prs_werkplek wp" : "")
          + extraInf.fromstr
          + " WHERE d.ins_srtdeel_key  = s.ins_srtdeel_key"
          + "   AND s.ins_srtgroep_key = g.ins_srtgroep_key"
          + "   AND g.ins_discipline_key = dis.ins_discipline_key"
          + (wpprefix ? "   AND d.ins_alg_ruimte_key = wp.prs_werkplek_key(+)" : "")
          + "   AND d.ins_deel_key = " + params.objectKey
          + extraInf.wherestr;
    }
    else
    {
      sql = "SELECT 'dummy' extra,"
          + "d.ins_deel_omschrijving"
          + extraInf.selectstr
          + " FROM ins_v_deelenonderdeel d"
          + "    , ins_srtdeel s"
          + extraInf.fromstr
          + " WHERE d.ins_srtdeel_key  = s.ins_srtdeel_key"
          + "   AND d.ins_deel_key = " + params.objectKey
          + filtClause
          + extraInf.wherestr;
    }
    var oRs = Oracle.Execute(sql);
    lobjectName = oRs(1).value; // "deel" of "ins_deel_omschrijving"
    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(); // close the recordset
  }

  // Bouw de url voor de persoons query op
  var objQueryUrl = rooturl + "/appl/shared/suggest/SuggestObject.asp"
                  + ((typeof params.autlevel != "undefined")? "?autlevel=" + params.autlevel : "?autlevel=-1")
                  + (params.module? "&module=" + params.module : "")
                  + (params.filtercode? "&filtcode=" + params.filtercode : "")
                  + (params.extracode? "&extracode=" + params.extracode : "")
                  + (params.autfunction? "&autfunction=" + params.autfunction : "")
                  + (params.extraParamValue? "&extraParamValue=" + params.extraParamValue : "")
                  + (params.excludekey? "&excludekey=" + params.excludekey : "")
                  + (params.inclComp? "&inclComp=1" : "")
                  + (params.relate? "&relate=1" : "");
  if (params.label)
  { %><tr <%=params.trclass?"class='"+params.trclass+"'":""%>>
    <td class="label">
      <label for="<%=fieldName%>_show"><%=params.label%></label>
    </td>
    <td>
<%
  } %>
  <div class="<%=fieldName%> nowrap<%=params.hidden ? " hidden" : ""%><%=params.disabled ? " disabled" : ""%><%=isMobile ? " input-icon-wrapper" : ""%>">
    <input id="<%=fieldName%>_show"
           class="fld<%=!params.readonly&&params.required? " required" : ""%><%=isMobile ? MOBILE_UI_CLASSES.input : ""%>"
           value="<%=safe.htmlattr(lobjectName)%>" placeholder="<%=safe.htmlattr(lwhenEmpty)%>"
           <%=params.readonly ? " readonly tabindex=-1" : ""%>
           <%=params.onChange && !params.readonly? " 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 */ %>>
    <input type="hidden" class="<%=fieldName%>" id="<%=fieldName%>" name="<%=fieldName%>" value="<%=params.objectKey%>">
    <% = params.moreinfo ? "<img alt='" + safe.htmlattr(L("ins_srtdiscipline_ins")) + "' class='details' src='" + rooturl + "/appl/Pictures/listdetail.gif' onclick='objectdetails_" + fieldName + "()'>" : ""%>
<%
    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)%>">
<%
    } %>
  </div>
<%
  if (params.label)
  { %>
    </td></tr>
<%
  } %>
  <script type="text/javascript">
    function objectdetails_<%=fieldName%> ()
    {
      if ($('#<%=fieldName%>')[0].value != -1) {
        FcltMgr.openDetail("<%=rooturl%>/appl/ins/ins_deel.asp?key=" + $('#<%=fieldName%>')[0].value, $('#<%=fieldName%>')[0].value);
      } else {
        FcltMgr.alert("Wat wil je nou?");
      }
    }
  </script>

<%
  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 + "\",";
        if ("field" in params.urlAdd[i])
            urlAddTxt += " field: \"" + params.urlAdd[i].field + "\"}";
        else if ("val" in params.urlAdd[i])
            urlAddTxt += " val: \"" + params.urlAdd[i].val + "\"}";
        else if ("jqfield" in params.urlAdd[i])
            urlAddTxt += " jqfield: \"" + params.urlAdd[i].jqfield + "\"}";
      }
      urlAddTxt += "]"
    }
%>
    <script type="text/javascript">
      $(function()
      {
        <%=objectName%> = new Suggest({ objectName: "<%=objectName%>",
                                        queryField: $("#<%=fieldName%>_show")[0],
                                        queryUrl: "<%=objQueryUrl%>",
                                        initKey: <%=params.objectKey? params.objectKey : -1%>,
                                        keyField: $(".<%=fieldName%>#<%=fieldName%>")[0]
                                        <%=params.prerequisite? ", prerequisite: " + params.prerequisite : ""%>
                                        <%=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": ""%>
                                      });
      });
    </script>
<%
  }
}
%>