<% /*
     $Revision$
     $Id$

     File:          disciplineselector.inc
     Description:   Algemene interface functie om een discipline 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.
                                  disc_key:          initi�le key waarde van de discipline die ingevuld moet worden.
                                  module:            Verplicht: module waarvan de disciplines zijn
                                  perslidKey:        Verplicht voor MLD: persoon waarvoor melding is
                                  multitoggle:       Sta multi-toggle toe
                                  idadd:             Identieficatie verschil bij gebruik van meerdere disciplineselectoren
                                  sgRelType:         De onderliggende multiSuggest-types die afhankelijk zijn van deze FCLTdisciplineselector, gescheiden door komma's.
                                                     De eerst volgende afhankelijke als eerste vermelden (bijv. "stdmelding, srtgroep, srtdeel").
                                  autfunctionKey:    Verplicht: fac_functie key of een array van fac_functie keys.
                                  label:             label dat voor het veld wordt weergegeven.
                                  filtercode:        extra filtercode voor de query die gebruikt wordt voor de suggest.
                                  cndfilter:         filter de conditie gebreken (srtdisc = xx(setting)) eruit.
                                  onChange:          onchange op het textveld.
                                  trclass:           wordt ook op de <tr> gezet.
                                  autlevel:          autorisatie niveau voor de query die gebruikt wordt voor de suggest.
                                  ins_key_arr:       alleen als de meldingen op dit object mogelijk zijn.
                                  behandelteam_key:  Vakgroepen waarbij je dit behandelteam kunt selecteren.
                                  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)).
                                  dohide:            verberg de hele discipline selector
                                  autRW:             Geeft aan of er read or write autorisatie geldt.
                                  noJustOne:         Onderdrukken van controle of er maar één waarde is die geselecteerd moet worden.
                                  whenEmpty           Text in suggest veld als deze leeg is. Indien niet meegegeven dan standaard string.
*/ %>
<!-- #include file="./Suggest/disciplineFilter.inc" -->

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

function FCLTdisciplineselector(fieldName, objectName, params) {
  Response.Write(FCLTdisciplineselector_HTML(fieldName, objectName, params));
}

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

  var sgType = "discipline";
  var idadd = "";
  if (params.idadd)
      idadd = params.idadd;
  if (!params.disc)
      params.disc = -1; // wordt gebruikt in getFiltClauseDiscipline()

  var lwhenEmpty = "";
  if (!params.readonly)
  {
    // the default empty value depends on the module
    switch(params.module)
    {
      // Plaatsgegevens
      case "MLDP": { lwhenEmpty = L("lcl_select_vakgroep");
                     break;
                   }
      case "MLD":  { lwhenEmpty = idadd == 2 ? L("lcl_select_mld_process_grp") : L("lcl_select_vakgroep");
                     break;
                   }
      case "MLDB": { lwhenEmpty = L("lcl_select_mld_process_grp");
                     break;
                   }
      case "BES":  { lwhenEmpty = L("lcl_select_catalogus");
                     break;
                   }
      default:     { lwhenEmpty = L("lcl_select_discipline");
                     break;
                   }
    }
  }
  lwhenEmpty = (params.whenEmpty != null ? params.whenEmpty :  (params.readonly ? L("lcl_select_readonly") : lwhenEmpty));
  var ldiscName = "";
  var lextraInit = "";

  if ("addfixedoption" in params && "key" in params.addfixedoption && params.disc_key == params.addfixedoption.key)
  {
      ldiscName  = params.addfixedoption.txt;
      lextraInit = params.addfixedoption.desc;
  }
  else if (!params.noJustOne || params.required || params.disc_key > 0)
  {
      params.autfunctionKeyArray = [];
      if (typeof params.autfunctionKey == "object")
        params.autfunctionKeyArray = params.autfunctionKey;
      else // (typeof params.autfunctionKey == "number")
        params.autfunctionKeyArray = [params.autfunctionKey];

      var filtClause = getFiltClauseDiscipline(params.filtercode, params);
      var extraInf = getExtraInfDiscipline(params.extracode);

      sql = "SELECT COUNT(distinct td.ins_discipline_key) aantal"
          + "  FROM ins_tab_discipline td"
          + "     , ins_srtdiscipline sd"
          + filtClause.from
          + " WHERE ins_discipline_verwijder IS NULL"
          + "   AND ins_srtdiscipline_verwijder IS NULL"
          + "   AND td.ins_srtdiscipline_key = sd.ins_srtdiscipline_key(+)" // Alleen bij MLD is de ins_srtdiscipline_key (altijd) ingevuld
          + filtClause.where;
      var oRs = Oracle.Execute(sql);
      var disc_count = oRs("aantal").value;
      oRs.Close();
      if (params.disc_key > 0 && disc_count == 0) // Invalid initKey
          params.disc_key = -1;
      else if (disc_count == 1)                   // Als er maar één discipline is, dan deze selecteren.
      {
        sql = "SELECT td.ins_discipline_key, "
            + (params.srtdisc_key > 0
              ? ""
              : "NVL2(sd.ins_srtdiscipline_prefix, sd.ins_srtdiscipline_prefix || '-', '') || ")
            + lcl.xsql('td.ins_discipline_omschrijving', 'td.ins_discipline_key') + " disciplineomschr"
            + extraInf.selectstr
            + " FROM ins_tab_discipline td"
            + ", ins_srtdiscipline sd"
            + filtClause.from
            + extraInf.fromstr
            + " WHERE td.ins_discipline_verwijder IS NULL"
            + "   AND ins_srtdiscipline_verwijder IS NULL"
            + "   AND td.ins_srtdiscipline_key = sd.ins_srtdiscipline_key(+)" // Alleen bij MLD is de ins_srtdiscipline_key (altijd) ingevuld
            + filtClause.where
            + extraInf.wherestr;
        var oRs = Oracle.Execute(sql);
        ldiscName = oRs("disciplineomschr").value;
        lextraInit = oRs("extra").value;
        params.disc_key = oRs("ins_discipline_key").value;
        if (params.ins_key_arr && params.ins_key_arr.length > 0) // dan ben ik zeker nieuw
          params.readonly = true;
        oRs.Close(); // close the recordset
      }
  }

  // Bouw de url voor de vakgroep query op
  var discQueryUrl = rooturl + "/appl/shared/suggest/SuggestDiscipline.asp"
                   + "?module=" + params.module
                   + "&perslidKey=" + params.perslidKey
                   + "&autfunctionKey=" + (typeof params.autfunctionKey == "object" && params.autfunctionKey instanceof Array? params.autfunctionKey.join(",") : params.autfunctionKey)
                   + "&autRW=" + params.autRW
                   + (params.srtdisc_key? "&srtdisc_key=" + params.srtdisc_key : "")
                   + (params.ins_key_arr && params.ins_key_arr.length > 0? "&ins_key_arr=" + params.ins_key_arr.join(",") : "")
                   + (params.behandelteam_key? "&behandelteam_key=" + params.behandelteam_key : "")
                   + (params.extracode? "&extracode=" + params.extracode : "")
                   + (params.filtercode? "&filtcode=" + params.filtercode : "")
                   + (params.ref_type? "&ref_type=" + params.ref_type : "")
                   + (params.cndfilter? "&cndfilter=1" : "");
  if (params.label && !params.dohide)
    resultstr += "<tr " + (params.trclass? "class='" + params.trclass + "'" : "") + ">"
               + "<td class='label'>"
               + "  <label for='" + fieldName + "_show'>" + params.label + "</label>"
               + (params.moreinfo && S("faq_enabled") == 1 && params.module != "MLDB"
                 ? "<span class='" + "labelextra details' title='" + safe.htmlattr(L("lcl_faq_items")) + "'onclick='disciplineselector.kennisbankitems()'>" + I("fa-question-circle") + "</span>"
                 : "")
               + "</td>"
               + "<td>";

  if (params.readonly && !params.dohide)
    resultstr += "<span id='" + fieldName + "_show' class='fld'>"
               + safe.html(ldiscName)
               + "</span>";
  else
  {
    if (isMobile)
      resultstr += "<div class='input-icon-wrapper'>";

    resultstr += "<input type='" + (params.dohide? "hidden" : "text") + "' id='"  + fieldName + "_show'"
               + " class='fld" + (params.required? " required" : "") + (isMobile ? MOBILE_UI_CLASSES.input : "") + "'"
               + " value='" + safe.htmlattr(ldiscName) + "'"
               + " placeholder='" + safe.htmlattr(lwhenEmpty) + "' sgType='" + sgType + idadd + "'"
               + (params.onChange? " sgonChange='" + params.onChange + "'" : "")
               + ">";

    if (isMobile)
      resultstr += "</div>";
  }
  resultstr += "<input type='hidden' id='" + fieldName + "' name='" + fieldName + "' value='" + params.disc_key + "'>";

  if (params.extraParamField)
    /* het extra parameter veld wordt door suggest object gevuld */
    resultstr += "<input type='hidden' id='" + params.extraParamField + "' name='" + params.extraParamField + "' value='" + safe.htmlattr(lextraInit) + "'>";

  if (params.label && !params.dohide)
    resultstr += "</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 += "]"
    }

    resultstr += "<script type='text/javascript'>"
               + "  $(function()"
               + "  {"
               +      objectName + idadd + " = new Suggest({ objectName: '" + objectName + idadd + "',"
               + "                                           sgType: '" + sgType + idadd + "',"
               + "                                           queryField: $('#" + fieldName + "_show')[0],"
               + "                                           queryUrl: '" + discQueryUrl + "',"
               + "                                           initKey: " + (params.disc_key? params.disc_key : -1) + ","
               + "                                           icon: '" + (params.module == "MLDB"? "fa-users" : "fa-tag") + "',"
               + "                                           keyField: $('#" + fieldName + "')[0]"
               +                                             (params.noJustOne? ", noJustOne: true" : "")
               +                                             (params.multitoggle? ", multitoggle: true" : "")
               +                                             (params.sgRelType? ", sgRelType: \"" + params.sgRelType + "\"" : "")
               +                                             (params.urlAdd? ", urlAdd: " + urlAddTxt : "")
               +                                             (params.extraParamField? ", extraParamField: $(\"" + "#" + params.extraParamField + "\")[0]" : "")
               +                                             (params.extraParamField? ", initExtraParam: \"" + safe.jsstring("" + lextraInit) + "\"": "")
               +                                             (params.isBad? ", isBad: true": "")
               +                                             (params.readonly? ", fieldReadonly: true": "")
               +                                             (params.addfixedoption? ", addfixedoption: JSON.parse('" + safe.jsstring(JSON.stringify(params.addfixedoption)) + "')": "")
               + "                                           ,highlightDescript: true"
               + "                                         });"
               + (params.hidden
                 ?    objectName + idadd + ".makeHidden();"
                 : "")
               + "  });";

    if (params.moreinfo && S("faq_enabled") == 1 && params.module != "MLDB")
    {
      resultstr += "disciplineselector ="
                 + "{"
                 + "  kennisbankitems: function()"
                 + "  {"
                 + "    function process_disc_info(data, textStatus)"
                 + "    {"
                 + "      if (data.aantal_fefaq > 0 || data.aantal_fofaq > 0)"
                 + "        FcltMgr.openDetail('appl/fac/fac_faq_search.asp?autosearch=1&urole=bo&disc_key_str='" + disc_key + ", " + L("lcl_faq_kennisbank") + ");"
                 + "    }"
                 + ""
                 + "    var disc_key=$('#" + fieldName + "')[0].value;"
                 + "    if (disc_key != -1)"
                 + "    {"
                 + "      $.getJSON('../ins/get_ins_info_ajax.asp',"
                 + "                { req_info: 'ins_discipline_key',"
                 + "                  disc_key: disc_key"
                 + "                },"
                 + "                process_disc_info);"
                 + "    }"
                 + "  }"
                 + "}";
    }
    resultstr += "</script>";
  }

  return resultstr;
}
%>