  <%@ language="javascript"%>
<% /*
    $Revision$
    $Id$

    File:           CAD/infoBord.asp
    Description:    Toont een verdiepingstekening met verdiepingsnavigator-balk en
                    presenteer daarin:
          x          1) de objecten van gedefinieerde discipline(s)
          x          2) of sta toe dat ruimtes worden geselecteerd
          x          Op de onclick wordt de klik-url van het thema of anders ../pda/reserveringen.asp voor dat object/die ruimte aangeroepen
          x          Kan o.a. toegepast worden voor Grafisch kiezen "werkplek" als een wp als reserveerbaar object
          x          is gemodelleerd), maar deze pagina weet zelf niet zoveel van de uiteindelijke toepassing
    Parameters:

        geb_key        optional, gebouw_key of building
        floor_key      optional, key of floor to be (initially) selected
                       Either geb_key or floor_key is required (both allowed)

        disc_key       optional, de discipline voor objecten, leeg voor ruimtes selecteren(?).
        discs          optional, disciplines waarvan de layers (ook) moeten worden getoond

        thema_key      optional, default=12, het te tonen kleur thema, -1=geen
        themaI         optional, default=-1, het te tonen symboolkleurthema, -1=geen
        themaW         optional, default=-1, het te tonen werkplekkleurthema, -1=geen
        label_key      optional, default=12, het te tonen label thema, -1=geen
        labelI         optional, default=-1, het te tonen symboollabelthema, -1=geen
        labelW         optional, default=-1, het te tonen werkpleklabelthema, -1=geen

        fac_usrrap_key optional, default=12, de te tonen rapportage, -1=geen
                                 merk op dat deze kolommen hide_f_alg_gebouw_key en hide_f_alg_verdieping_key moet hebben
        floor_rap      optional, filter the report of fac_usrrap_key by:
                       0: filter fac_usrrap_key *altijd* met floor_key van zichtbare plattegrond (default)
                       1: filter fac_usrrap_key alleen als zichtbare plattegrond anders is dan terugval floor_key
                       2: filter fac_usrrap_key *nooit* (altijd hele gebouw, dat filteren we wel altijd)
        datumfilter    optional, date applied to date-aware theme's

        bordlabel_key  optional, de middels 2d-bordjes te tonen ruimteinfo in 3d tekening (3D-only)

        bodyclass      optional, extra class die op de <body> wordt gezet. Handig voor css overrules voor een specifiek scherm
        hidenav        optional, geen verdieping selector tonen (impliceert scherm op deze subverdieping)
        showmode       optional, 2D or 3D, default=0, 0=automatic (user may toggle), 2=only2d, 3=only3d
        antialias      optional, default S("fg_antialias")

        zoomDWGX,
        zoomDWGY       optional, centercoordinaten van de tekening
        zoomScale      optional, zoom in op deel van de verdieping. mm per pixel, begin eens met 40

        symbolX,
        symbolY        optional, coordinaten van een Hier staat u symbool
        symbol         optional, default urhere.png

        wallColor      optional, kleur van de zijkant van de muren (default 0xb5b5b5)
        ambientLight   optional, kleurtoon die over de muren heen gaat (default 0x999999)
        directionalLight optional, kleur van de bovenzijde van de muren (default 0xc0c0c0)

        Just passing by parameters:
         link2res       optional, default 1 (passed to pda/reserveringen.asp om een link naar de eigen reservering te tonen(1) of niet (0))
         deel2res       optional, default 0 (passed to the click-url, maar ER LIJKT NERGENS IETS MEE TE GEBEUREN?
         resruimtefilter optional, default 0 (passed to mySLNK2IMG, > 0 = Verwijderde en vervallen ruimten uitsluiten(dan is default 1 logischer?)
         restrict2res_disc optional, default [], (passed to pda/reserveringen.asp, res_discipline autorisatie voor (ins_deel)werkplekken)

    Context:
    Note:           Als disc_key meegegeven dan worden alleen de verdiepingen getoond waarop die objecten voorkomen
                    Bij elke refresh wordt altijd teruggesprongen naar de default verdieping (floor_key).
                    zoomDWGX etc. is niet per verdieping. Zorg dus dat ze identiek zijn als je er meerdere hebt
                    Nauwkeurig DWGX DWGY etc bepalen:
                        - Resize je scherm naar de gewenste grootte en bepaal pixelX (breedte plaatje)
                        - Zoom in naar het gewenste plattegrond deel
                        - Rechtsklikken op de tekening voor 'About' SLNDKWF
                        - Dit toont (x0, y0)-(x1, y1)=sizeX,sizeY: de exacte DWG coordinaten in beeld
                        - Nu: zoomDWGX = x0+(sizeX/2)
                              zoomDWGY = y0+(sizeY/2)
                              zoomScale = sizeX / pixelX

aaen: http://sgf12/facilitor5iwork/appl/cad/showGebouw.asp?geb_key=5404&thema_key=41&label_key=21&floor_key=5563&zoomDWGX=45303&zoomDWGY=19107&zoomScale=0.015
aait: http://sgf12/facilitor5iwork/appl/cad/showGebouw.asp?geb_key=49&thema_key=21&label_key=-1&floor_key=72&zoomDWGX=25190&zoomDWGY=15464&zoomScale=0.02
*/
%>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/iface.inc" -->
<!-- #include file="FGII.inc" -->

<%
FCLTHeader.Requires({ js: ["jquery-ui.js", "date.js"]
                    });

var geb_key       = getQParamInt("geb_key", -1);
var disc_key      = getQParamInt("disc_key", -1) // De *object* discipline (typisch Bouwkunde)
var restrict2res  = getQParamIntArray("restrict2res_disc", []);
var discs         = getQParamIntArray("discs", []) // Te tonen disciplines (ondergrond bijvoorbeeld)
var thema_key     = getQParamInt("thema_key", S("fg_infobordthema_key"));   // In de core is een default thema met key <12> gedefinieerd (cad_v_thema_srtruimtesensor)
if (thema_key == -1) thema_key = S("fg_infobordthema_key"); // alsnog, de code is nog niet bestand tegen themaloos aanroepen
var themai_key    = getQParamInt("themai", -1);
var label_key     = getQParamInt("label_key", S("fg_infobordlabel_key"));   // In de core is een default labelthema met key <12> gedefinieerd (cad_v_label_bezetbareruimtes)
var bordlabel_key = getQParamInt("bordlabel_key", -1);//
var contmode      = getQParamInt("contmode", 0); //

var floor_rap     = getQParamInt("floor_rap", 0);
var datumfilter   = getQParamDate("datumfilter", null);

var bodyclass     = getQParamSafe("bodyclass", "");

var floor_key     = def_floor_key = getQParamInt("floor_key", -1);
var avail_flrs    = getQParamIntArray("avail_flrs", []);
if (geb_key == -1 && floor_key != -1) {
    sql = "SELECT alg_gebouw_key FROM alg_verdieping WHERE alg_verdieping_key="+floor_key;
    oRs = Oracle.Execute(sql);
    geb_key = oRs("alg_gebouw_key").value;
    oRs.Close();
}
var hidenav       = getQParamInt("hidenav", 0);  // optie: toon geen floornavigator

var fac_usrrap_key = getQParamInt("fac_usrrap_key", S("fg_infobordreport_key")); // In de core is een default usrrap (res_v_rap_infobordframe) met key <12> gedefinieerd

var zoomScale = getQParamFloat("zoomScale", -1);
var zoomDWGX = getQParamFloat("zoomDWGX", null);
var zoomDWGY = getQParamFloat("zoomDWGY", null);

var link2res = getQParamInt("link2res", 1);
var deel2res = getQParamInt("deel2res", 0);
var rrfilter = getQParamInt("resruimtefilter", 0);

// floorkey is doorgaans nog niet bekend hier.
//if (floor_key > 0 && getQParamInt("autozoom", 0)== 1 && discs.length)
//{
//    var sql = "SELECT MIN(ins_deel_dwgx) xmin, MAX(ins_deel_dwgx) xmax,"
//            + "       MIN(ins_deel_dwgy) ymin, MAX(ins_deel_dwgy) ymax,"
//            + "  FROM ins_v_aanwezigdeel, alg_ruimte"
//            + " WHERE ins_discipline_key IN (" + discs.join(",") +")"
//            + "   AND alg_verdieping_key = " + floor_key
//            + "   AND ins_alg_ruimte_key = ins_alg_ruimte_key"
//            + "   AND ins_alg_ruimte_type = 'R'";
//    __DoLog(sql);
//}

// Voor de 'U staat hier'
// Liever wil ik dat ze het ins_deel ('scherm') tekenen en dan een ins_key meegeven
var symbolX = getQParamFloat("symbolX", null);
var symbolY = getQParamFloat("symbolY", null);
var symbol = getQParam("symbol", null);

// Nieuw
var showmode = getQParamInt("showmode", 0);  // 0=automatic (user may toggle), 2=only2d, 3=only3d (mis nog: user may toggle but start with 2d/3d)

var antialias = getQParamInt("antialias", S("fg_antialias"));

var my_cadrechten = user.func_enabled("CAD"); // negeer scope, we kunnen zo maar van verdieping wisselen
var autfunction= "WEB_CADUSE";
var authparams = user.checkAutorisation(autfunction); // voor kiezen *andere* verdiepingen

 // buildTransitParam met de settings die voor alle verdiepingen gelijk zullen zijn.
var transit = buildTransitParam("symbolX,symbolY,symbol,floor_key,bordlabel_key,werkplek,mode,contmode,nolabel,camx,camy,camz,hpix,vpix,scl,ox,oy,rot,wallColor,ambientLight,directionalLight,labelrot,wallw,wallh,datumfilter,link2res");

var mapper = "3dize.asp?x=1" + transit;
var mapper2D = "../SlnkDWF/ToonIMG.asp?ShowButtons=1" + transit;

if (fac_usrrap_key > -1)
{
    // parameters voor de rapportage, typisch de verdieping_key
    var params = "&nobuttons=1&bodyclass=rflrscreen";  // ik wil een uniek id tbv css styling
    params += "&fclt_f_colname1=hide_f_alg_gebouw_key&fclt_f_colvalue1=" + geb_key;
    // rapperBase is zonder floor_key
    var rapperBase = "../../appl/fac/fac_usrrap_list.asp?usrrap_key=" + fac_usrrap_key + params;
    if (floor_rap==0) // Dan altijd er bij
        rapperBase += "&fclt_f_colname2=hide_f_alg_verdieping_key&fclt_f_colvalue2=" + floor_key;
}

%>
<html>
  <head>
<%  FCLTHeader.Generate(); %>
    <title><%= L("lcl_facilitor_infobord") %> </title>

    <script type="text/javascript">
      var floor_key = <%=floor_key%>;
      var zoomDWGX = <%=safe.jsfloat(zoomDWGX)%>;
      var zoomDWGY = <%=safe.jsfloat(zoomDWGY)%>;
      var zoomScale = <%=safe.jsfloat(1 / zoomScale)%>;
      var showmode = <%=showmode%>;
      var dimension = <%=(showmode == 2 ? 2 : 3)%>;

      var autozoomed = false;
      function OnFloorChanged(deze, fkey, pdimension)
      {
        window.dimension = pdimension || window.dimension;
        $("input[type=button]").removeClass("selected");
        if (deze)
            $(deze).addClass("selected");
        floor_key = -1; // Eventkes invalid
        resetMap();
        floor_key = fkey;
        window.autozoomed = false;
        //myRefresh();
        var mapper = window.dimension==2?"<%=safe.jsstring(mapper2D)%>":"<%=safe.jsstring(mapper)%>";
        var rapper = "<%=safe.jsstring(rapperBase)%>";
        if (floor_key == <%=floor_key%>)
        {
            mapper += "&showSymbol=1"
        }

<% if (floor_rap == 1) { %>
        if (floor_key != <%=floor_key%>)
            rapper += "&fclt_f_colname2=hide_f_alg_verdieping_key&fclt_f_colvalue2=" + floor_key;
<% } %>

        $("#MMap")[0].src = mapper; // Forceer refresh

        if ($("#RRap").length)
            $("#RRap")[0].src = rapper;
      }

      /************************************************************\
      * We know all we need. Now refresh the image on the right
      \************************************************************/
      function myRefresh()
      {
          MMap.SetCustomParameters(getCustomParameters())

          if (window.dimension==3)
          {
              // Eerst een keer het plaatje heel globaal renderen om dwg-info te achterhalen
              $.getJSON("../CAD/mySlnk2IMG.asp?AsMap=1&vKey=" + floor_key,  { }, function (pSLNKEvent)
              {
                  MMap.gSLNKEvent = pSLNKEvent;
                  if (window.zoomDWGX === null || window.zoomDWGX === null)
                  {
                      window.zoomDWGX = (pSLNKEvent.DWGminX + pSLNKEvent.DWGmaxX) / 2;
                      window.zoomDWGY = (pSLNKEvent.DWGminY + pSLNKEvent.DWGmaxY) / 2;
                  }
                  if (window.zoomScale < 0)
                      window.zoomScale = Math.min(window.innerWidth / (pSLNKEvent.DWGmaxX - pSLNKEvent.DWGminX),
                                                  window.innerHeight / (pSLNKEvent.DWGmaxY - pSLNKEvent.DWGminY));
                  MMap.zoom2DWG(zoomDWGX, zoomDWGY, zoomScale);
                  MMap.Refresh(); // Try not to zoom extents
              } );
          }
          else
            MMap.Refresh();


      }
      function to2D()
      {
        OnFloorChanged(null, floor_key, 2);
      }

      function to3D()
      {
        OnFloorChanged(null, floor_key, 3);
      }

      function getCustomParameters()
      {
        return "&vKey=" + floor_key +
               "&disc_key=<%=disc_key%>" +
               "&discs=<%=discs%>" +
               "&thema=<%=thema_key%>" +
               "&themaI=<%=getQParamInt("themaI", -1)%>" +
               "&themaW=<%=getQParamInt("themaW", -1)%>" +
               "&label=" + (dimension==2&&<%=label_key%>==-1?<%=bordlabel_key%>:<%=label_key%>) +
               "&labelI=<%=getQParamInt("labelI", -1)%>" +
               "&labelW=<%=getQParamInt("labelW", -1)%>" +
               "&antialias=<%=antialias%>" +
               "&contmode=<%=contmode%>" +
               "&highlight=" + window.alg_ruimte_key +
               "&ins_key=" + window.ins_key // zojuist gereserveerd
               +"&deel2res=" + <%=deel2res?deel2res:0%>
               +"&resruimtefilter=" + <%=rrfilter?rrfilter:0%>
               +"&datumfilter=" + <%= datumfilter?datumfilter.getTime():0 %>;

      }

      /************************************************************\
      * This event gets fired by the SLNKDWF viewer after the user
      * clicked on the drawing.
      * Note that by now myFindInIMG.asp has already translated
      * the room-label or object-label into a ALG_RUIMTE_KEY
      * or INS_DEEL_KEY
      \************************************************************/
      window.ins_key = -1;
      window.alg_ruimte_key = -1;
      function callback_reserved(json)
      {
        if (json.cancel)
        {
            window.ins_key = -1;
            window.alg_ruimte_key = -1;
        }
        myRefresh();
      }

      function MMap_onClick(SlnkEvent)
      {
        // Voorkom dat de popup verdwijnt door de reload. Laat wel een timeout staan zodat
        // het scherm uiteindelijk zich wel ververst als iemand wegloopt met open popup
        if (parent.resetReload)
            parent.resetReload();

        switch (SlnkEvent.Param)
        {
          case "onclick":
          case "ondblclick":
          {
            if (SlnkEvent.Key)
            { // Zoek het object/ ruimte
              var css_style = (window.innerWidth > 500 ? "min-width: 480px;" : ""); // fix too small modal on wide screen RABO#
              if (String(SlnkEvent.Key).match(/^I:/)) // INS_DEEL
              {
                var intKey = parseInt(SlnkEvent.Key.substring(2),10);
                window.ins_key = intKey; // onthouden
                window.alg_ruimte_key = -1
                var url = (SlnkEvent.click_urlI || "../pda/reserveringen.asp?qrc=1&modal=1&ins_key=") + intKey;
                url += "&res_van=" + <%= datumfilter?datumfilter.getTime():0 %>;
                url += "&deel2res=" + <%= deel2res %>;
                url += "&restrict2res_disc=<%=restrict2res.join(',')%>"
                MMap.noAutoResize(true); // rustiger
                FcltMgr.openModalDetail(url, "", { callback: callback_reserved, alwaysCallback: true, xnoClose: true, style: css_style });
                MMap.noAutoResize(false);
              }
              if (SlnkEvent.Key > 0 && SlnkEvent.ContourLayer == "SLNK Contours") // RUIMTE
              {
                var alg_ruimte_key = SlnkEvent.Key;
                window.ins_key = -1;
                window.alg_ruimte_key = alg_ruimte_key; // onthouden
                var url = (SlnkEvent.click_urlR || "../pda/reserveringen.asp?qrc=1&modal=1&alg_ruimte_key=") + alg_ruimte_key;
                url += "&res_van=" + <%= datumfilter?datumfilter.getTime():0 %>;
                url += "&deel2res=" + <%= deel2res %>;
                MMap.noAutoResize(true); // rustiger
                FcltMgr.openModalDetail(url, "", { callback: callback_reserved, alwaysCallbackParams: {}, xnoClose: true, style: css_style });
                MMap.noAutoResize(false);
              }
            }
            break;
          }
        }
      }

      function resetMap()
      {
        if (!MMap || !MMap.Reset)
            return; // Safari: te vroeg
        MMap.Reset();
        MMap.SetLabelPosition(<%=S("fg_labelPosition")%>);
        MMap.SetIMGGenerator("../CAD/mySlnk2IMG.asp");
        MMap.SetPaperColor(<%=S("fg_paperColor")%>);
      }

      function resizeIframes()
      {
        return; // Hij is toch te laat want 3Dsize heeft al naar innerHeight gekeken

        var tabheight = 10; // die is floating $("#theReport").height();

        if ($('#MMap').height() != window.innerHeight - tabheight)
        {
          // $('#MMap').height(window.innerHeight - tabheight);
        }
      };

var /*global*/ resizeTimerID=null;
      function init()
      {
// IE11?      window.MMap = document.getElementById("MMap");
        resizeIframes();
        resetMap();
        if (floor_key > 0)
            myRefresh();

        window.onresize = function()
        {
        	if (window.resizeTimerID) clearTimeout(window.resizeTimerID);
            window.resizeTimerID = setTimeout(resizeIframes, 100);// use a delay for IE because the resize event fires repeatly
        }
<% if (thema_key > 0 || themai_key > 0) { %>
        $("#fslegenda").load("legenda.asp?thema=<%=thema_key%>&themai=<%=themai_key%>&scenario_key=0&parentKey="+floor_key+"&mode=0&fulldiscreet=1&showtitle=0&LegendaFilter=L<%= datumfilter?'&datumfilter='+datumfilter.getTime():'' %>");
<% } %>
      }

      function updateClock()
      {
        var newDate = new Date();
        $('#date').html(toDateString(newDate));
    	$('#time').html(toTimeString(newDate, true));
      }
      $(function () {
          setInterval( updateClock, 1000);
      } );
    </script>
  </head>

  <body id="floorscreen<%=geb_key%>" class="floorscreen <%=bodyclass%>">

      <div id='fsmenu'>
        <div id='fsnavigation'>
<%
        Response.Write("<div id='fslogo'></div>");
        sql = "SELECT alg_locatie_omschrijving"
            + "     , alg_gebouw_naam"
            + "  FROM alg_v_gebouw_gegevens ag"
            + " WHERE ag.alg_gebouw_key = " + geb_key;
        var oRs = Oracle.Execute(sql);
        Response.Write("<h2 class='floorscreen'>" + safe.html(oRs("alg_locatie_omschrijving").value) + "</h2>");
        Response.Write("<h2 class='floorscreen'>" + safe.html(oRs("alg_gebouw_naam").value) + "</h2>");
        if (datumfilter)
        {
            Response.Write("<h2 class='infodatumfilter'>" + toDateString(datumfilter, false, true) + "</h2>");
            if (showmode == 0)
            {
                Response.Write("<button onclick='to2D()'>2D</button'><button onclick='to3D()'>3D</button>");
            }
        }
        oRs.Close();

if (thema_key > 0)
{
    sql = "SELECT cad_thema_view, cad_legenda_key"
        + "  FROM cad_thema"
        + " WHERE cad_thema_key = " + thema_key;
    var oRs = Oracle.Execute(sql);
    var thema_view = oRs("cad_thema_view").Value;
    var legenda_key = oRs("cad_legenda_key").Value;
    oRs.Close();

    if (disc_key > 0)
    {
        var sqlMaxKleur = "SELECT ar.alg_verdieping_key, MAX(thema.waarde) waarde, ti.cad_legendawaarde_rgb, count(*) aantal "
                        + "  FROM ins_deel id, "
                        + "       ins_srtdeel isd, "
                        + "       alg_ruimte ar, "
                        + "       ( "+ thema_view + ") THEMA, "
                        + "       cad_legendawaarde TI "
                        + " WHERE     id.ins_alg_ruimte_key = ar.alg_ruimte_key "
                        + "   AND id.ins_srtdeel_key = isd.ins_srtdeel_key "
                        + "   AND ins_deel_verwijder IS NULL "
                        + "   AND (ins_deel_vervaldatum IS NULL OR ins_deel_vervaldatum > TRUNC(SYSDATE))"
                        + "   AND ins_deel_parent_key IS NULL "
                        + "   AND ins_srtdeel_acadsymbol is not null "
                        + "   AND id.ins_discipline_key = " + disc_key
                        + "   AND THEMA.ins_deel_key = id.ins_deel_key "
                        + "   AND thema.waarde >= ti.cad_legendawaarde_value"
                        + "   AND NOT EXISTS" // geen grotere waarde waar hij onder zou vallen
                        + "      (SELECT '1' FROM cad_legendawaarde ti2"
                        + "        WHERE ti2.cad_legendawaarde_value > ti.cad_legendawaarde_value"
                        + "          AND thema.waarde >= ti2.cad_legendawaarde_value"
                        + "          AND ti2.cad_legenda_key = " + legenda_key + ")"
                        + "   AND ti.cad_legenda_key = " + legenda_key
                        + " GROUP BY ar.alg_verdieping_key, ti.cad_legendawaarde_rgb, ti.cad_legendawaarde_rgb";
    }
    else // Ruimte mode
    {
        var sqlMaxKleur = "SELECT ar.alg_verdieping_key, MAX(thema.waarde) waarde, ti.cad_legendawaarde_rgb, count(*) aantal "
                        + "  FROM alg_ruimte ar, "
                        + "       ( "+ thema_view + ") THEMA, "
                        + "       cad_legendawaarde TI "
                        + " WHERE THEMA.alg_ruimte_key = ar.alg_ruimte_key "
                        + "   AND thema.waarde >= ti.cad_legendawaarde_value"
                        + "   AND NOT EXISTS"
                        + "      (SELECT '1' FROM cad_legendawaarde ti2"
                        + "        WHERE ti2.cad_legendawaarde_value > ti.cad_legendawaarde_value"
                        + "          AND thema.waarde >= ti2.cad_legendawaarde_value"
                        + "          AND ti2.cad_legenda_key = " + legenda_key + ")"
                        + "   AND ti.cad_legenda_key = " + legenda_key
                        + " GROUP BY ar.alg_verdieping_key, ti.cad_legendawaarde_rgb, ti.cad_legendawaarde_rgb";
    }
} else {
  var sqlMaxKleur = "/*TODO indien te ondersteunen*/ SELECT NULL alg_verdieping_key, NULL waarde, NULL cad_legendawaarde_rgb, NULL aantal FROM DUAL";
}

// TODO: Query optimalizeren zodat alleen één record met de hoogste 'waarde' er uit komen?
//       Nu zijn we nog lui en sorteren de hoogste vooraan en negeren in de loop de rest.
sql = "SELECT v.alg_verdieping_key, v.alg_verdieping_code"
    + "     , v.alg_verdieping_omschrijving"
    + "     , maxkleur.cad_legendawaarde_rgb"
    + "     , maxkleur.waarde"
    + "     , aantal"
    + "  FROM alg_v_aanwezigverdieping v, "
    + "       cad_tekening ct," // er moet wel een tekenig voor zijn
    + "       (" + sqlMaxKleur + ") maxkleur"
    + " WHERE v.alg_gebouw_key = " + geb_key
    + "   AND v.alg_verdieping_key = maxkleur.alg_verdieping_key"
    + "   AND ct.alg_verdieping_key = v.alg_verdieping_key";
if (disc_key > 0)
{
    sql += " AND EXISTS"
              + "  (SELECT ar.alg_verdieping_key"
              + "     FROM ins_v_aanwezigdeel idd,"
              + "          ins_srtdeel isd,"
              + "          alg_ruimte ar"
              + "    WHERE idd.ins_discipline_key = " + disc_key
              + "      AND idd.ins_srtdeel_key = isd.ins_srtdeel_key"
              + "      AND isd.ins_srtdeel_acadsymbol IS NOT NULL"
              + "      AND idd.ins_alg_ruimte_type = 'R'"
              + "      AND idd.ins_alg_ruimte_key = ar.alg_ruimte_key"
              + "      AND ar.alg_verdieping_key = v.alg_verdieping_key"
              + "      AND (idd.ins_deel_vervaldatum IS NULL OR idd.ins_deel_vervaldatum > TRUNC(SYSDATE))"
              + ")"
}
if (avail_flrs.length)
    sql += " AND v.alg_verdieping_key IN (" + avail_flrs.join(", ") + ")"
sql += " ORDER BY v.alg_verdieping_volgnr, maxkleur.waarde DESC"; // 'Hoogste' waarde vooraan (PF: kleur irrelevant voor volgorde)
var oRs = Oracle.Execute(sql);

Response.Write("<div id='verdiepingen'  style='"+(hidenav ? 'display:none': '')+"'>");
var last_floor_key = -1;
var nrfloors = 0;
while (!oRs.Eof)
{
    if (last_floor_key == oRs("alg_verdieping_key").Value)
    {
        oRs.MoveNext();
        continue;
    }
    nrfloors += 1;
    var desc = oRs("alg_verdieping_omschrijving").Value;
    if (oRs("aantal").Value > 0 && oRs("waarde").Value > 0)
        desc += " ("+oRs("aantal").Value+ ")";
    Response.Write("\n<input type='button' value='" + safe.htmlattr(desc) + "'"
                    + (oRs("alg_verdieping_key").Value == floor_key?" class='selected flrbutton'":"class='flrbutton'")
                    + (0 && oRs("cad_legendawaarde_rgb").Value ? " style='background-color:#" + safe.htmlattr(toHexValue(oRs("cad_legendawaarde_rgb").Value)) + "'":"")
                    + " onclick='OnFloorChanged(this, "+oRs("alg_verdieping_key").Value+", showmode)'"
                    +">");
    last_floor_key = oRs("alg_verdieping_key").Value;
    oRs.MoveNext();
}
oRs.Close()
Response.Write("</div>");
// de default width volgens .flrbutton is 150px. Als er veel verdiepingen zijn wil je comprimeren
// door meer buttons naast elkaar te doen. We gaan uit van 10 button-regels hoogte
if (nrfloors > 20 ) {
%><script>$(".flrbutton").width("38px");</script><%
} else if (nrfloors > 10 ) {
%><script>$(".flrbutton").width("70px");</script><%
}
%>
        </div>
        <div id='fslegenda'></div>
      </div>

      <!-- ==========================
           HET plaatje
      ============================ -->

      <div id = 'mapCell3D' class="floorscreen">
        <iframe id='MMap' name='MMap' src="<%=safe.htmlattr(showmode==2?mapper2D:mapper)%>&showSymbol=1"
            frameborder='0' framespacing='0' scrolling='no'
            onLoad='init();'
            width="100%" height="100%">
        </iframe>
      </div>
<%
    if (fac_usrrap_key > -1)
    {
        var rapper = rapperBase;
%>
      <div id='theReport' class="floorscreen">
        <iframe id='RRap' name='RRap' src="<%=safe.htmlattr(rapper)%>"
            frameborder='0' framespacing='0' scrolling='no'
            onload="FcltMgr.iframeLoaded(this)"
            width="100%" height="26px">
        </iframe>
      </div>

      <div id='theClock'>
        <span id='date'></span><br>
        <span id='time'></span>
      </div>
<%
    }
%>
</body>
</html>
<% ASPPAGE_END(); %>
