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

     File:        res_rsv_deel_by_placetime.asp MOBILE version (DELEN MOETEN NOG GESHARED WORDEN)
     Description: Alternatieve interface om (eenvoudig) een resereerbaar deel en tijd te kunnen kiezen
                  zoals een werkplekobject (als flexplek)
     Parameters:  res_disc:  required de res_discipline van de objecten
                  geb_key:   optioneel voorgeselecteerd gebouw
                  resdate:   optioneel voorgeselecteerde datum
                  x ins_key:  optioneel voorgeselecteerd object
                  x res_key:  optioneel voorgeselecteerd reseerveerbaar object

                  en verder wat sturings- en overrule-parameters zoals hieronder genoemd
     Context:     -
     Note:        -

*/%>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../res/res.inc" -->
<!-- #include file="./mobile.inc" -->
<!-- #include file="../Shared/FlexFiles.inc" -->
<!-- #include file="./iface.inc" -->
<!-- #include file="./resultset_table.inc" -->
<!-- #include file="../res/res_rsv_deel_by_placetime.inc" -->
<%
var act_key          = getQParamInt("act_key", -1);
var res_disc_key_arr = getQParamIntArray("res_disc", []);

// Dit werkt alleen voor res_deel/werkplek-catalogi, dat checken en bepalen we maar gelijk even
var sql = "SELECT " + lcl.xsqla("rdis.ins_discipline_omschrijving", "rdis.ins_discipline_key")
        + "     , " + lcl.xsqla("a.res_activiteit_omschrijving", "a.res_activiteit_key")
        + "     , rdis.ins_discipline_key"
        + "     , ins_discipline_min_level"
        + "     , res_activiteit_master_key"
        + "     , res_activiteit_duur"
        + "     , DECODE (auth.ins_discipline_key, NULL, 0, 1)     authorized_for_disc"
        + "  FROM res_discipline rdis, res_activiteitdiscipline rad, res_activiteit a"
        + "     , (SELECT ins_discipline_key"
        + "          FROM fac_v_webgebruiker w, fac_functie f"
        + "         WHERE     w.fac_functie_key = f.fac_functie_key"
        + "               AND fac_gebruiker_alg_level_write < 9"
        + "               AND fac_functie_code IN ('WEB_RESUSE', 'WEB_RESFOF')"
        + "               AND w.prs_perslid_key = " + user_key + ") auth"
        + " WHERE rdis.ins_discipline_min_level IN (1, 5) "
        + "   AND rdis.ins_discipline_key = rad.res_discipline_key"
        + "   AND a.res_activiteit_key = rad.res_activiteit_key"
        + "   AND rdis.ins_discipline_verwijder IS NULL"
        + (act_key > 0                  ? "   AND rad.res_activiteit_key = " + act_key : "")
        + (res_disc_key_arr.length > 0  ? "   AND rdis.ins_discipline_key IN (" + res_disc_key_arr.join(",") + ")" : "")
        + "   AND rdis.ins_discipline_key = auth.ins_discipline_key(+)";
var oRs = Oracle.Execute(sql)
if (oRs.eof)
{
    Response.Write("You need to provide an appropriate value for parameters act_key or res_disc")
    Response.End;
}

// Zonder disciplines, maar ook met heeft deze query de disciplines gecheckt, we nemen de onze
res_disc_key_arr = [];
var activiteitnaam = oRs("res_activiteit_omschrijving").Value;  // die gegevens is of een willekeurige bij de catalogus
var ischild = oRs("res_activiteit_master_key").Value;
var res_activiteit_duur = oRs("res_activiteit_duur").Value;
var ins_discipline_min_level;
var catalogusnaam = "??";
while (!oRs.eof)
{
    if (oRs("authorized_for_disc").Value == 1) { // Alleen als je er rechten op hebt
        res_disc_key_arr.push(oRs("ins_discipline_key").value);
        ins_discipline_min_level = oRs("ins_discipline_min_level").Value;
        catalogusnaam = oRs("ins_discipline_omschrijving").Value;
    }
    oRs.MoveNext();
}
oRs.close();

user.auth_required_or_abort(res_disc_key_arr.length);
// Als je hier komt heb je dus in ieder geval ergens WEB_RESUSE en/of WEB_RESFOF rechten op
var xfunc = user.func_enabled2("RES", { "ins_discipline_key": res_disc_key_arr, "checkOptimistic": true });
var ALGwritelevel = 9;
for (var func in xfunc._funcodes) {
    if (func == "WEB_RESUSE" || func == "WEB_RESFOF") {
        ALGwritelevel = Math.min(ALGwritelevel, xfunc._funcodes[func].ALGwritelevel);
    }
}

var zoom         = getQParamFloat("zoom", 2);
var geb_key      = getQParamInt("geb_key", -1);
var floor_key    = getQParamInt("floor_key", -1);
var werkpl_key   = getQParamInt("wsp_key", -1);
var local_tz  = S("fac_server_timezone");
if (geb_key > -1) {
    local_tz = res.getTimezoneBy(geb_key, "G");
} else if (floor_key > -1) {
    local_tz = res.getTimezoneBy(floor_key, "V");
}

var res_deel_key = getQParamInt("res_deel_key", -1);    // unused. Zou ooit direct naar dag+intervalselectie kunnen
var thema_key    = getQParamInt("thema_key", 12);
var themaI_key   = getQParamInt("themaI_key", 13);
var bordlabel_key= getQParamInt("bordlabel_key", 13);

var daylimit    = getQParamInt("daylimit", 12);           // na daylimit kun je voor de eerste dag niet meer reserveren, default 12:00, werkt niet icm offset
var local_now   = convertToLocalTime(new Date(), local_tz);
var afternoon   = local_now.getHours() >= daylimit;
var dateoffset  = getQParamInt("offset", afternoon ? 1 : 0);

var datelimit   = getQParamInt("limit", 7);              // aantal te kiezen dagen tov offset
var floorselect = getQParamInt("floorselect", 0);         // na gebouw ook de verdiepingen laten kiezen
var mapselect   = getQParamInt("mapselect", 1) == 1;      // werkplek via plattegrond kiezen

var resdate    = getQParamDate("date", null);  // hoe geef je zelf een date mee?

var dagcapaciteit = getQParamFloat("capaciteit", 9);   // aantal uren beschikbaar per dag tbv berekening van globale vulling
var minimumbeschikbaarheid = getQParamFloat("minbes", 1.1);  // minder dan zoveel uur beschikbaar beschouwen we onbeschikbaar
var onlyfree = getQParamInt("onlyfree", 1);  // moeten bezette werkplekken wel (0) of niet (1) (onklikbaar) getoond worden in de lijst

if (ischild)
{
    dagcapaciteit = 0; // als geen master gevonden
    minimumbeschikbaarheid = res_activiteit_duur;
}
if (resdate)
{
    dagcapaciteit = rdpt.dagcapaciteitCalc(resdate, dagcapaciteit, act_key, res_disc_key_arr, geb_key);
}

var transitParam = buildTransitParam(["zoom", "daylimit", "offset", "act_key", "res_disc", "geb_key", "floor_key", "wsp_key", "date", "onlyfree", "floorselect", "mapselect", "thema_key", "themaI_key", "bordlabel_key", "limit", "capaciteit", "minbes"],
                                     { "res_disc": res_disc_key_arr }); // res_disc_key_arr is specifieker dan res_disc

var qrc = getQParamInt("qrc", 0) != 0;
%>
<html>
  <head>
<% FCLTMHeader.Generate(); %>
    <script>
    // shows the floorplan
    function plan(verdieping_key, res_disc_key_arr, thema_key, themaI_key, res_van, bordlabel_key)
    {
        window.location.href = "<%=rooturl%>/appl/pda/res_plattegrond.asp?zoom=<%=zoom%>&verdieping_key=" + verdieping_key + "&res_disc=" + res_disc_key_arr + "&thema_key=" + thema_key + "&themaI_key=" + themaI_key + "&bordlabel_key=" + bordlabel_key + "&res_van=" + res_van;
    }
    </script>
  </head>

<body>
<%
    var buttons =  [];

    /* global */ var calc_dagcapaciteit;
    function fnDataFilter(oRs)
    {
        var dt = resdate;
        if (!dt) // dan moet hij in de query zitten
        {
            dt = new Date(oRs("datum").Value);
        }
        /* global */ calc_dagcapaciteit = rdpt.dagcapaciteitCalc(dt, dagcapaciteit, act_key, res_disc_key_arr, geb_key);
        if (!calc_dagcapaciteit)
        {
            return false;
        }
        return true;
    }

    // KIES GEBOUW INDIEN NOG NIET BEKEND
    if (geb_key == -1)
    {
        PAGE_START({id: "page-1", pclass: "reservering-new"});
        HEADER({title: L("lcl_beschikbaarheid_by_bld").format(catalogusnaam), back:!qrc, home:!qrc});
        CONTENT_START();

        // Toon eerst maximaal 3 favorieten (eerder gereserveerde werkplekken).
        function fnFavWP_Submit(oRs)
        {
          return "?geb_key=" + oRs("alg_gebouw_key").Value
               + "&floor_key=" + oRs("alg_verdieping_key").Value
               + "&wsp_key=" + oRs("res_deel_key").Value + transitParam;
        }
        function fnFavWP_colSubHeader(oRs)
        {
            var result = oRs("alg_gebouw_naam").Value || "";
            var alg_locatie_plaats = oRs("alg_locatie_plaats").Value || "";
            if (alg_locatie_plaats) {
                result += (result ? ", " : "") + alg_locatie_plaats;
            }
            return result;
        }

        var sql = rdpt.mijn_verdiepingen_met_resdelen_hist_sql(res_disc_key_arr, ALGwritelevel)
        var rst = new ResultsetTable({ sql: sql
                                    ,  tableTitle: L("lcl_res_recent")
                                    ,  keyColumn: "alg_gebouw_key"
                                    ,  linkColumn: fnFavWP_Submit
                                    ,  headerColumn: "res_deel_omschrijving"
                                    ,  detailColumn: "alg_verdieping_omschrijving"
                                    ,  subheaderColumn: fnFavWP_colSubHeader
                                    ,  iconColumn: fnRecentIcon
                                    ,  ID: "resgebtable"
                                    ,  showAll: true
                                    ,  emptyWhenNoResult: true
                                    });
        var fav = rst.processResultset();

        // Toon de gebouwen waar werkplekken gereserveerd kunnen worden.
        function fnSubmit(oRs)
        {
          return "?geb_key="+ oRs("alg_gebouw_key").Value + transitParam + "&res_disc="+oRs("ins_discipline_key").Value;  // je kiest een gebouw-discipline combinatie
        }
        function fnRecentIcon(oRs)
        {
            return (oRs("ins_discipline_image").value ? oRs("ins_discipline_image").value : "fa-circle");
        }
        function fnDisciplinecapaciteit(oRs)
        {
            return oRs("aantal").Value + " " + oRs("ins_discipline_omschrijving").Value;
        }
        function fnGebouwIcon(oRs)
        {
            return SYMBOL(oRs("alg_gebouw_image").Value, { "module": "ALGPHG", "key": oRs("alg_gebouw_key").Value })
                || ('<div class="buildingavatar">' + safe.html((oRs("alg_locatie_code").Value).substr(0,2).toUpperCase()) + '</div>');
        }

        var sql = rdpt.mijn_verdiepingen_met_resdelen_sql(res_disc_key_arr, -1, ALGwritelevel, dateoffset);
        var rst = new ResultsetTable({ sql: sql
                                    ,  tableTitle: fav > 0 ? L("lcl_mobile_gebouwen") : ""
                                    ,  keyColumn: "alg_gebouw_key"
                                    ,  linkColumn: fnSubmit
                                    ,  singleLink: true
                                    ,  headerColumn: "alg_gebouw_naam"
                                    ,  subheaderColumn: fnDisciplinecapaciteit
                                    ,  detailColumn: "alg_locatie_plaats"
                                    ,  iconColumn: fnGebouwIcon
                                    ,  ID: "resgebtable"
                                    ,  showAll: true
                                    ,  emptySetString: L("lcl_empty")
                                    });

        var cnt = rst.processResultset();

        CONTENT_END();
        FOOTER();
        PAGE_END();
    } // geb_key


    // KIES DATUM VOOR GEGEVEN GEBOUW INDIEN NOG NIET BEKEND
    // dat kan natuurlijk ook met een calendar, maar we willen extra info en kleuren tonen
    if (geb_key>0 && resdate == null)
    {
        sql = "SELECT g.alg_gebouw_werkdagen, alg_gebouw_naam "
                + "  FROM alg_gebouw g"
                + " WHERE g.alg_gebouw_key = " + geb_key;
        oRs = Oracle.Execute(sql)
        var alleenwerkdagen = oRs("alg_gebouw_werkdagen").Value;
        var gebouw_naam = oRs("alg_gebouw_naam").Value;
        oRs.close();

        PAGE_START({id: "page-2", pclass: "reservering00"});
        HEADER({title: L("lcl_beschikbaarheid_by_day").format(gebouw_naam, catalogusnaam), back:true, home:!qrc });
        CONTENT_START();
        // Bepaal het aantal items in dit gebouw
        var sql = rdpt.aantal_resdelen_in_gebouw_sql(res_disc_key_arr, geb_key, -1);
        var oRs = Oracle.Execute(sql)
        var aantalitems = oRs("aantal").Value;
        oRs.close();
        var gebouwcapaciteit = aantalitems * dagcapaciteit;  // in uren

        sql = rdpt.dagbezetting_resdelen_in_gebouw_sql(res_disc_key_arr, geb_key, -1, dateoffset, datelimit, null); // JGL: act_key

        if (werkpl_key > -1 && resdate == null)
        {   // Is een eerder gekozen werkplek nog beschikbaar?
            var sql = "SELECT datum"
                    + "     , CASE WHEN gevuld = 0 THEN 2" // geheel beschikbaar
                    + "            WHEN " + dagcapaciteit + " - gevuld < " + minimumbeschikbaarheid + " THEN 0" // niet meer beschikbaar
                    + "            ELSE 1" // gedeeltelijk beschikbaar
                    + "        END beschikbaarheid"
                    + "     , gevuld"
                    + "     , aantal"
                    + "     , vrijedag"
                    + "     , weekdag"
                    + "  FROM (" + sql + ")";
        }

        function fnrowClassD(oRs)
        {
            var bcls = "";
            if (oRs("vrijedag").value > 0)
                bcls += "vrijedag";
            else if (alleenwerkdagen && (oRs("weekdag").value == 1 || oRs("weekdag").value == 7))
            {
                    bcls += " vrijweekend";
            }
            else
            {
                var capaciteit = (werkpl_key > -1 ? dagcapaciteit : calc_dagcapaciteit);
                var item_count = (werkpl_key > -1 ? 1 : aantalitems);
                bcls += rdpt.bezettings_class(oRs("gevuld").value, capaciteit*item_count, minimumbeschikbaarheid*item_count);
            }
            return bcls;
        }

        function fnBeschikbaarheid(oRs)
        {
            if (ischild)
            {
                // We veronderstellen (mogelijk onterecht) dat elk van de aantalitems even lang beschikbaar is op een dag
                // Als er maar één master is per dag is dat zeker logisch
                var blok_per_dag = Math.floor(calc_dagcapaciteit / res_activiteit_duur)*aantalitems;
                beschikbaarheid = blok_per_dag - oRs("gevuld").Value/res_activiteit_duur;
                var txt = beschikbaarheid+ "/" + blok_per_dag
            }
            else
            {
                var txt = "";
                if (oRs("vrijedag").value == 0 && (!alleenwerkdagen ||(alleenwerkdagen && (oRs("weekdag").value != 1 && oRs("weekdag").value != 7))))
                {
                    if (werkpl_key > -1)
                    {   // Een eerder gekozen werkplek.
                        var dt = new Date(oRs("datum").Value);
                        var v_bloktijden = res.getBloktijdenDisc(res_disc_key_arr[0], dt, geb_key);
                        var res_blok = rdpt.getIntervalString(werkpl_key, dt, v_bloktijden, geb_key);
                        if (res_blok == "")
                            txt = L("lcl_niet_beschikbaar");
                        else
                            txt = "<div class='listbodytext'>" + I("fa-calendar") + "&nbsp;"+res_blok+"</div>";
                    }
                    else
                    {
                        var beschikbaarheid = ((1 - (oRs("gevuld").Value/gebouwcapaciteit))*100).toFixed(0); // 0..100
                        txt = L("lcl_res_dagbeschikbaarpct")+" "+beschikbaarheid+"%";
                    }
                }
                else
                {
                    if (oRs("vrijedag").value > 0) txt += L("mld_vrije_dagen")+" ";
                    if (oRs("weekdag").value == 1 || oRs("weekdag").value == 7)
                    {
                        if (alleenwerkdagen)
                            txt += L("lcl_res_weekend");
                    }
                }
            }
            return txt
        }
        function fnDetail (oRs)
        {
            return "";
        }
        function fnDagIcon(oRs)
        {
            return '<div class="dayavatar">' + safe.html(new Date(oRs("datum").Value).getDate()) + "</div>";
        }

        function fncolDatum(oRs)
        {
            return toDateString(oRs.Fields("datum").Value);
        }
        function fnSubmitD(oRs)
        {
            if (oRs("vrijedag").value == 0 && (!alleenwerkdagen ||(alleenwerkdagen && (oRs("weekdag").value != 1 && oRs("weekdag").value != 7))))
            {
                if (werkpl_key > -1)
                {
                    if (oRs("beschikbaarheid").Value == 0)
                        return "";
                }
                return "?date="+ (new Date(oRs("datum").Value).getTime()) + transitParam;
            }
            else
                return "";
        }

        var rst = new ResultsetTable({ sql: sql
                             ,  fnDataFilter: fnDataFilter
                             ,  keyColumn: "datum"
                             ,  linkColumn: fnSubmitD
                             ,  singleLink: true
                             ,  headerColumn: fncolDatum
                             ,  subheaderColumn: fnBeschikbaarheid
                             ,  detailColumn: fnDetail
                             ,  iconColumn: fnDagIcon
                             ,  rowClass: fnrowClassD
                             ,  ID: "datetable"
                             ,  showAll: true
                             ,  emptySetString: L("lcl_empty")
                             });

        var cnt = rst.processResultset();

        CONTENT_END();
        FOOTER();
        PAGE_END();
    } // resdate


    // 3. KIES VERDIEPING INDIEN GEWENST EN NOG NIET BEKEND
    if (resdate && floorselect == 1 && geb_key > -1 && floor_key == -1)
    {
        sql = "SELECT alg_gebouw_naam "
                + "  FROM alg_gebouw g"
                + " WHERE g.alg_gebouw_key = " + geb_key;
        oRs = Oracle.Execute(sql)
        var gebouw_naam = oRs("alg_gebouw_naam").Value;
        oRs.close();


        PAGE_START({id: "page-2b", pclass: "reservering00"});
        HEADER({title: L("lcl_beschikbaarheid_by_flr").format(catalogusnaam,gebouw_naam,toDateString(resdate).toLowerCase()), back:true, home:!qrc });
        CONTENT_START();

        var sql = rdpt.mijn_verdiepingen_met_resdelen_sql(res_disc_key_arr, geb_key, ALGwritelevel, dateoffset);

        function fnSubmitF(oRs)
        {
          return "?floor_key="+ oRs("alg_verdieping_key").Value + transitParam;
        }
        function fnAantal(oRs)
        {
            return oRs("aantal").value + " " + safe.html(catalogusnaam);
        }
        function fnFloorIcon(oRs)
        {
            return '<div class="flooravatar">'+safe.html(oRs("alg_verdieping_code").Value)+'</div>';
        }
        // Onderstaande 2 functies hebben dezelfde berekening nodig, die vrij duur is, dat wil je optimaliseren
        // Omdat het aantal regels beperkt is (<25, vaker minder) doe ik het toch maar zo
        function fnrowClassF(oRs)
        {
            var bcls= "";
            var sql2 = rdpt.dagbezetting_resdelen_in_gebouw_sql(res_disc_key_arr, geb_key, oRs("alg_verdieping_key").value, dateoffset, datelimit, resdate);
            oRs2 = Oracle.Execute(sql2);
            bcls += rdpt.bezettings_class(oRs2("gevuld").value, calc_dagcapaciteit*oRs("aantal").value, minimumbeschikbaarheid*oRs("aantal").value);
            oRs2.close();
            return bcls; // te duur
        }

        function fnBeschikbaarheidF(oRs)
        {
            var txt = "";
            var vloercapaciteit = oRs("aantal").value * calc_dagcapaciteit;  // in uren
            var sql2 = rdpt.dagbezetting_resdelen_in_gebouw_sql(res_disc_key_arr, geb_key, oRs("alg_verdieping_key").value, dateoffset, datelimit, resdate);
            oRs2 = Oracle.Execute(sql2);
            // Stop when invalid date is detected
            if (oRs2.eof)
            {
                __DoLog("Data verwacht in fnBeschikbaarheidF, maar geen data aanwezig!");
                __DoLogForm();
                // Strip de datum er vanaf, dan komen we weer terug bij de datum-selectie
                var transitParam = buildTransitParam(["zoom", "daylimit", "offset", "act_key", "res_disc", "geb_key", "wsp_key", "onlyfree", "floorselect", "mapselect", "thema_key", "themaI_key", "bordlabel_key", "limit"]);
                Response.Redirect("?1=1" + transitParam);
            }
            else
            {
                var beschikbaarheid = ((1 - (oRs2("gevuld").Value/vloercapaciteit))*100).toFixed(0); // 0..100
                txt = L("lcl_res_dagbeschikbaarpct")+" "+beschikbaarheid+"%";
            }
            oRs2.close();
            return txt
        }

        var rst = new ResultsetTable({ sql: sql
                             ,  fnDataFilter: fnDataFilter
                             ,  keyColumn: "alg_verdieping_key"
                             ,  linkColumn: fnSubmitF
                             ,  singleLink: true
                             ,  headerColumn: "alg_verdieping_omschrijving"
                             ,  detailColumn: fnAantal
                             ,  subheaderColumn: fnBeschikbaarheidF
                             ,  rowClass: fnrowClassF
                             ,  iconColumn: fnFloorIcon
                             ,  ID: "resflrtable"
                             ,  showAll: true
                             ,  emptySetString: L("lcl_empty")
                             });

        var cnt = rst.processResultset();

        CONTENT_END();
        FOOTER();
        PAGE_END();


    } // floor_key




    // ALS JE HIER BENT, WEET JE EEN GEBOUW(A) EN EEN DATUM(B)
    // DAN WILLEN WE VERDER TOT EEN RES_DEEL_KEY en concrete van/tot-tijden
    if (resdate && geb_key > 0)
    {
        if (werkpl_key > -1)
        {   // Is er al een werkplek bekend? Kijk dan of deze voor vandaag vrij is.
            var is_beschikbaar = 2;
            var sql = "SELECT totaal"
                    + "     , CASE WHEN totaal = 0 THEN 2" // geheel beschikbaar
                    + "            WHEN " + dagcapaciteit + " - totaal < " + minimumbeschikbaarheid + " THEN 0" // niet meer beschikbaar
                    + "            ELSE 1" // gedeeltelijk beschikbaar
                    + "        END beschikbaarheid"
                    + "  FROM ("
                            +  "SELECT SUM(r.res_rsv_deel_tot - r.res_rsv_deel_van)*24 totaal"
                            +  "  FROM res_rsv_deel r"
                            +  "     , res_deel     d"
                            +  " WHERE d.res_deel_key = r.res_deel_key"
                            +  "   AND d.res_deel_verwijder IS NULL"
                            +  "   AND (  d.res_deel_vervaldatum IS NULL"
                            +  "       OR d.res_deel_vervaldatum < " + resdate.toSQL()
                            +  "       )"
                            +  "   AND r.res_rsv_deel_verwijder IS NULL"
                            +  "   AND TRUNC(r.res_rsv_deel_van) = " + resdate.toSQL()
                            +  "   AND r.res_deel_key = " + werkpl_key
                    + "       )"
            var oRs = Oracle.Execute(sql);
            is_beschikbaar = oRs("beschikbaarheid").Value;
            oRs.Close();
            if (is_beschikbaar > 0)
            {   // Werkplek is voor deze datum nog niet gereserveerd.
                // Gelijk de popup om te reserveren.
                    //if (oRs("bezet").value <= dagcapaciteit - minimumbeschikbaarheid)
                var url = "../pda/reserveringen.asp?qrc="+(qrc?1:0)+"&res_deel_key="+werkpl_key+"&res_van="+(new Date(resdate).getTime()) + "&ismobile=1";
                Response.Redirect(url);
            }
        }
        else
        {
            sql = "SELECT alg_gebouw_naam"
                + "  FROM alg_v_aanweziggebouw"
                + " WHERE alg_gebouw_key = " + geb_key;
            oRs = Oracle.Execute(sql)
            var gebouw_naam = oRs("alg_gebouw_naam").Value;
            oRs.Close();

            PAGE_START({id: "page-3", pclass: "reservering00"});
            HEADER({title: catalogusnaam+" "+gebouw_naam+" "+toDateString(resdate).toLowerCase(), back:true, home:!qrc });
            CONTENT_START();
              if (floor_key > -1 && themaI_key > -1 && thema_key > -1)
              {
                var sql = "SELECT COUNT (*) tekeningen"
                        + "  FROM cad_tekening t, alg_v_aanwezigverdieping v "
                        + " WHERE     t.alg_verdieping_key = v.alg_verdieping_key "
                        + "   AND cad_tekening_verwijder IS NULL "
                        + "   AND v.alg_verdieping_key = " + floor_key;
                var oRs = Oracle.Execute(sql);
                var aantaltekeningen = oRs("tekeningen").Value;
                oRs.Close();
                if (aantaltekeningen > 0 && mapselect)
                {
                    CONTROLGROUP_START();
                        BUTTON(L("lcl_prs_wp_fgraph"), {click: 'plan(' + floor_key + ', [' + res_disc_key_arr.join(",") + '], ' + thema_key + ', ' + themaI_key + ', '  + (new Date(resdate).getTime()) + ', ' + bordlabel_key + ');', icon: "fa-map-marker-alt"});
                    CONTROLGROUP_END();
                }
              }

            // bepaal de dicipline-afhankelijke reserveringsintervallen
            // Neem bij meerdere disciplines alleen de eerste: De bloktijden zouden hetzelfde moeten zijn. Mergen van twee disciplines is niet mogelijk.
            bloktijden = res.getBloktijdenDisc(res_disc_key_arr[0], resdate, geb_key);

            function fncolSubHeader(oRs)
            {
                var res_blok = rdpt.getIntervalString(oRs("res_deel_key").value, resdate, bloktijden, geb_key);
                if (res_blok =="")
                    res_blok = "";//L("lcl_niet_beschikbaar");
                else
                    res_blok = "<div class='listbodytext'>" + I("fa-calendar") + "&nbsp;"+res_blok+"</div>";
                return (floorselect == 0 ? "<div class='listbodykop'>"+safe.html(oRs("alg_verdieping_omschrijving").Value)+ "</div>" : "") + res_blok;
            }

            function fnrowClassRD(oRs)
            {
              return rdpt.bezettings_class(oRs("bezet").value, calc_dagcapaciteit, minimumbeschikbaarheid);
            }
            function fnResDeelIcon(oRs)
            {
                var icon = "fa-tv-retro";
                if (oRs.Fields("res_deel_image").Value != null)
                {
                  icon = oRs.Fields("res_deel_image").Value;
                  if (!icon.match(/^http/))
                      icon = safe.htmlattr(S("res_image_path") + "deel/thumb/" + icon);
                }
                else if (oRs.Fields("ins_discipline_image").Value != null)
                  icon = oRs.Fields("ins_discipline_image").Value;

                return icon;
            }

            function fnPlaats(oRs)
            {
                return safe.html(oRs("plaats").value+" "+(oRs("alg_ruimte_omschrijving").value||""));
            }
            function fnSubmitRD(oRs)
            {
                if (oRs("bezet").value <= calc_dagcapaciteit - minimumbeschikbaarheid)
                    return "../pda/reserveringen.asp?qrc="+(qrc?1:0)+"&res_deel_key=" + oRs("res_deel_key").Value + "&res_van="+(new Date(resdate).getTime()) + "&ismobile=1";
                else
                    return "";
            }

            // Per item (werkplek) in dit gebouw hoeveel er die dag bezet is
            sql = rdpt.res_deel_bezetting_op_dag_sql(res_disc_key_arr, geb_key, floor_key, resdate, (onlyfree ? dagcapaciteit - minimumbeschikbaarheid : null));

            var rst = new ResultsetTable({ sql: sql
                                         , fnDataFilter: fnDataFilter // zet globale calc_dagcapaciteit
                                         , keyColumn: "res_deel_key"
                                         , linkColumn: fnSubmitRD
                                         , singleLink: true
                                         , headerColumn: "res_deel_omschrijving"
                                         , detailColumn: fnPlaats
                                         , subheaderColumn: fncolSubHeader
                                         , iconColumn: fnResDeelIcon
                                         , ID: "datetable"
                                         , rowClass: fnrowClassRD
                                         , showAll: true
                                         });

              var cnt = rst.processResultset();
            CONTENT_END();
            FOOTER();
            PAGE_END();
        }
    }
PDA_PAGE_END(); %>
	</body>
</html>
<% ASPPAGE_END(); %>