<%@ LANGUAGE="javascript" %>

<% /*
    $Revision$
    $Id$

    File:               Legenda.asp
    Description:        Generate an legend
    Parameters:
        parentKey       required: ALG_VERDIEPING_KEY of ALG_TERREINSECTOR_KEY
        Thema           optional: THM_THEMA.THEM_THEMA_KEY van ruimtethema
        ThemaI          optional: THM_THEMA.THEM_THEMA_KEY van objectenthema. Als beide bestaan prevaleert deze
        mode            required: MODE_IN or MODE_OUT (hoewel tegenwoordig afleidbaar uit CAD_THEMA_TYPE)
        forPrint        optional: 0 of 1. Bij printen iets compacter
        datumfilter     vooralsnog boolean gedrag: indien meegegeven en niet null, dan wordt een datumselector toegevoegd
                        anders niet, met de suggestie dat er al een vaste datum geldt. Daar wordt niks mee gedaan verder.
    Context:            CAD/Default.asp bij wisseling van verdieping of thema
                        Let wel: standaard is het frame dichtgeklapt. Het wordt wel
                        altijd uitgevoerd!
    Note:               Alle(en) waarden die echt alfanumeriek voorkomen op de verdieping
                        worden in de  legenda getoond. Het kan dus voorkomen (als een ruimte
                        niet op de tekening gevonden wordt) dat de kleur niet in de tekening
                        terugkomt
*/

    var pThema_key= getQParamInt("thema");
    var pThemaI_key= getQParamInt("themai", -1);
    var pvKey     = getQParamInt("parentKey");
    var inoutMode = getQParamInt("mode");
    var scenario_key = getQParamInt("scenario_key");   // current scenario, 0 voor geen
    var legendaFilter = getQParam("legendaFilter", "V");   // "V"/"L"/"*"
    var datumfilter = getQParamDate("datumfilter", null);
    var fulldiscreet = getQParamInt("fulldiscreet", 0) == 1;
    if (!(pThemaI_key > 0)) // Alleen voor (trage) object thema's
        fulldiscreet = 0;
    var forPrint   = getQParamInt("forPrint", 0);
    var showtitle  = getQParamInt("showtitle", 1) == 1;
    var outputmode = 0; // altijd 'screen' zodat default.css wel wordt bijgeladen voor 'legendakleurblokje'
%>

<!--#include file='../Shared/common.inc'-->
<!--#include file='../Shared/iface.inc'-->
<!--#include file='../CAD/FGII.inc'-->

<% if (forPrint) { %>
<head>
    <%  FCLTHeader.Generate({ outputmode: outputmode }); %>
</head>
<body>
<% } %>
<table>
<%
    sql = "SELECT ts.CAD_LEGENDA_KEY,"
        + "       ts.CAD_LEGENDA_DISCREET, "
        + "       tt.CAD_THEMA_VIEW, tt.CAD_THEMA_TYPE, tt.FAC_FUNCTIE_KEY"
        + "  FROM CAD_LEGENDA ts, CAD_THEMA tt"
        + " WHERE tt.CAD_THEMA_KEY = " + (pThemaI_key > 0 ? pThemaI_key : pThema_key)
        + "   AND tt.CAD_LEGENDA_KEY = ts.CAD_LEGENDA_KEY";
    oRs = Oracle.Execute(sql)

    if (oRs.EOF) Response.end; // Is wel heel vreemd, een lege legenda
    var themaType = oRs("CAD_THEMA_TYPE").Value;
    var discreet=oRs("CAD_LEGENDA_DISCREET").value==1;
    var legenda_key=oRs("CAD_LEGENDA_KEY").value;
    var viewName = oRs("CAD_THEMA_VIEW").value;
    oRs.close();

    var isUpdatable = (themaType & 0x80) == 0x80;

    // TODO: als updatable dan ook testen of FAC_FUNCTIE_KEY wel schrijfrechten heeft en of het locatiegebonden rechten zijn

    if (isUpdatable)
        var wkveld = "waarde_key" // veld  moet er dan ook zijn!
    else
        var wkveld = "null waarde_key";
    if (inoutMode == MODE_IN)
    {
        if (scenario_key==0)
        {
            if ((themaType & 0x18) == 0x10) // Objecten
            {
                // Toon legendawaarden die bij *een* object voorkomen, anders te ingewikkeld met disc en zo
                var waardenSQL = "select distinct waarde, null waarde_key"
                               + "  from " + viewName + " th";
            }
            else if ((themaType & 0x18) != 0x08) // ruimtes
            {
                if (isUpdatable && legendaFilter == "L") // alles op locatie
                {
                    var waardenSQL = "select waarde, "+wkveld
                                   + "  from " + viewName + " th, alg_ruimte ar, "
                                   + "       alg_verdieping av, alg_gebouw ab,"
                                   + "       alg_verdieping av1, alg_gebouw ab1" // 1 versies 'zoeken' locatie
                                   + " where th.alg_ruimte_key = ar.alg_ruimte_key"
                                   + "   and ar.alg_verdieping_key = av.alg_verdieping_key"
                                   + "   and av.alg_gebouw_key = ab.alg_gebouw_key"
                                   + "   and av1.alg_verdieping_key = " + pvKey
                                   + "   and ab1.alg_gebouw_key = av1.alg_gebouw_key"
                                   + "   and ab.alg_locatie_key = ab1.alg_locatie_key"
                }
                else
                {
                    var waardenSQL = "select waarde, "+wkveld
                                   + "  from " + viewName + " th"
                    if (!isUpdatable || legendaFilter == "V")
                    waardenSQL = "select waarde, "+wkveld
                               + "  from " + viewName + " th, alg_ruimte ar "
                               + " where th.alg_ruimte_key = ar.alg_ruimte_key"
                               + "   and alg_verdieping_key = " + pvKey;
                }
            }
            else // werkplekken
            {
                var waardenSQL = "select waarde, null waarde_key"
                               + "  from " + viewName + " th, prs_werkplek pw, alg_ruimte ar "
                               + " where th.prs_werkplek_key = pw.prs_werkplek_key"
                               + "   and pw.prs_alg_ruimte_key = ar.alg_ruimte_key"
                               + "   and alg_verdieping_key = " + pvKey;
            }
        }
        else // projectmode
        {
            if ((themaType & 0x18) != 0x08) // prj ruimtes
            {
                var waardenSQL = "select waarde, "+wkveld
                               + "  from " + viewName + " th, prj_ruimte pr "
                               + " where th.prj_ruimte_key = pr.prj_ruimte_key"
                               + "   and alg_verdieping_key = " + pvKey
                               + "   and prj_scenario_key = " + scenario_key;
                if (isUpdatable && legendaFilter == "L") // alles op locatie
                {
                    var waardenSQL = "select waarde, "+wkveld
                                   + "  from " + viewName + " th, prj_ruimte pr, "
                                   + "       alg_verdieping av, alg_gebouw ab,"
                                   + "       alg_verdieping av1, alg_gebouw ab1" // 1 versies 'zoeken' locatie
                                   + " where th.prj_ruimte_key = pr.prj_ruimte_key"
                                   + "   and pr.alg_verdieping_key = av.alg_verdieping_key"
                                   + "   and av.alg_gebouw_key = ab.alg_gebouw_key"
                                   + "   and av1.alg_verdieping_key = " + pvKey
                                   + "   and ab1.alg_gebouw_key = av1.alg_gebouw_key"
                                   + "   and ab.alg_locatie_key = ab1.alg_locatie_key"
                }
                else
                {
                    if (!isUpdatable || legendaFilter == "V") // Verdieping
                    {
                        var waardenSQL = "select waarde, "+wkveld
                                       + "  from " + viewName + " th, prj_ruimte pr "
                                       + " where th.prj_ruimte_key = pr.prj_ruimte_key"
                                       + "   and alg_verdieping_key = " + pvKey;
                    }
                    else // Alle variant
                    {
                        var waardenSQL = "select waarde, "+wkveld
                                       + "  from " + viewName + " th"
                    }
                }
            }
            else // prj werkplekken
            {
                var waardenSQL = "select waarde, null waarde_key"
                               + "  from " + viewName + " th, prj_werkplek pw, prj_ruimte pr "
                               + " where th.prj_werkplek_key = pw.prj_werkplek_key"
                               + "   and pw.prj_ruimte_key = pr.prj_ruimte_key"
                               + "   and alg_verdieping_key = " + pvKey
                               + "   and prj_scenario_key = " + scenario_key;
            }
        }
    }
    else
    {
        var waardenSQL = "select waarde, null waarde_key"
                       + "  from " + viewName + " th, alg_terreinsector ar "
                       + " where th.alg_terreinsector_key = ar.alg_terreinsector_key"
                       + "   and alg_locatie_key = " + pvKey;
    }

      if (fulldiscreet) // discreet-->alle waarden ongeacht voorkomen
          sql = "SELECT DISTINCT "+ lcl.xsqla('ti.CAD_LEGENDAWAARDE_OMSCHR','ti.cad_legendawaarde_key')
              + "     , ti.CAD_LEGENDAWAARDE_RGB"
              + "  FROM CAD_LEGENDAWAARDE ti"
              + " WHERE ti.CAD_LEGENDA_KEY = " + legenda_key
              + " ORDER BY CAD_LEGENDAWAARDE_OMSCHR";
      else if (discreet) // alleen voorkomende waarden
          sql = "SELECT "+ lcl.xsqla('ti.CAD_LEGENDAWAARDE_OMSCHR','ti.cad_legendawaarde_key')
              + ", ti.CAD_LEGENDAWAARDE_RGB, TH2.WAARDE_KEY, COUNT(*) aantal"
              + "  FROM CAD_LEGENDAWAARDE ti, (" + waardenSQL + ") TH2 "
              + " WHERE TI.CAD_LEGENDAWAARDE_VALUE = TH2.WAARDE "
              + "   AND ti.CAD_LEGENDA_KEY = " + legenda_key
              + " GROUP BY "+lcl.xsql('ti.CAD_LEGENDAWAARDE_OMSCHR','ti.cad_legendawaarde_key')+", ti.CAD_LEGENDAWAARDE_RGB, TH2.WAARDE_KEY"
              + " ORDER BY CAD_LEGENDAWAARDE_OMSCHR";
      else // Niet discreet-->alle waarden ongeacht voorkomen
          sql = "SELECT DISTINCT "+ lcl.xsqla('ti.CAD_LEGENDAWAARDE_OMSCHR','ti.cad_legendawaarde_key')
              + "     , ti.CAD_LEGENDAWAARDE_RGB "
              + "     , fac.safe_to_number(CAD_LEGENDAWAARDE_VALUE)"
              + "  FROM CAD_LEGENDAWAARDE ti"
              + " WHERE ti.CAD_LEGENDA_KEY = " + legenda_key
              + " ORDER BY fac.safe_to_number(CAD_LEGENDAWAARDE_VALUE)" // Numeriek sorteren!
      oRs = Oracle.Execute(sql);

      var fg_papercolor = S("fg_papercolor");
      var r = (fg_papercolor >> 16) % 256;
      var g = (fg_papercolor >> 8) % 256;
      var b = fg_papercolor % 256;
      var legendBackground = "rgb(" + r + ", " + g + ", " + b + ")";

      v_count   = "";
      while (!oRs.EOF)
      {
            var v_waarde_key = null;
            var v_waarde  = oRs.Fields("CAD_LEGENDAWAARDE_OMSCHR").value;
            var v_kleur   = oRs.Fields("CAD_LEGENDAWAARDE_RGB").value.replace(/ /g,'');
            var legendForeground = toRgb(v_kleur, { "alpha": S("fg_themaalpha") });
            if (discreet && !fulldiscreet)
            {
                v_count = " (" + oRs.Fields("aantal").value + "x)";
                v_waarde_key  = oRs.Fields("waarde_key").value;
            }

            var styleAttr = "border-color: " + safe.htmlattr(legendForeground) + ";"
                          + "background-color: " + safe.htmlattr(legendBackground);
%>    <tr
<% if (isUpdatable && v_waarde_key != null) { %>
         class='legendaupdatable' onmousedown='mydragstartLegenda(event, "<%=safe.htmlattr(safe.jsstring(styleAttr))%>", "<%=v_waarde_key%>");'
<% } else {
        if ((themaType == 0x01))
        { %>
          class='legendselectable' onclick='if (window.selectfromLegenda) selectfromLegenda(event, "<%=safe.jsstring(v_waarde)%>");'
<%      }
    } %>
        >
        <td class='legendaregel'>
            <div class='legendakleur'>
                <div class='legendakleurblokje' style="<%=styleAttr%>">&nbsp;</div>
            </div>
         </td>
        <td class='legendatekst' title="<%=safe.htmlattr(v_waarde)%><%=v_count%>"><%=safe.html(v_waarde)%></td>
      </tr>
<%
      oRs.MoveNext();
      }
      oRs.Close();
%>
    </table>
<%  if (!forPrint && isUpdatable && legendaFilter != "*")
    { %>
  <span id="legendMore" class="details default-clickable-icon" title="<%=legendaFilter == "V" ? L("lcl_location") : L("lcl_all")%>" onclick="onLegendaFilterChange('<%=legendaFilter == "V" ? "L" : "*"%>')">
    <%=I("fa-angle-double-down")%><%=L("lcl_more")%>
  </span>
<%  }

if (forPrint) { %>
</body>
<% } %>
<% ASPPAGE_END(); %>
