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

    File:           pda/reserveringen.asp
    Description:    Toont gegevens van een res_ruimte en biedt optie te boeken

    Parameters:     res_ruimte_key (of eventueel als alg_ruimte_key)
                    res_deel_key (of eventueel als ins_deel_key)
    Context:
    Notes:          De user moet geauthenticeerd zijn en WEB_RESUSE (read) rechten hebben. Met write rechten kan ook
                    daadwerkelijk gereserveerd worden, indien de zaal nu vrij is.
                    Merk op: het feit dat deze functie (mobiel) kan worden aangeroepen betekent dat er fysiek aan de
                    ALG-scope voldaan wordt ("ik mag hier kennelijk komen").
                    Het echt reserveren doen we met een post naar rsv_edit_ruimte_save.asp

                    Dit is zowel een lijst als een detailscherm, een bijzondere situatie

    Future extensions:
                    - indien de huidige reserving bijna klaar is ook vanaf-eind + 1 of 2 uur kunnen claimen
                    - (dan ook) de schoonmaaktijd-volgend-op de lopende-reservering in acht nemen? Dat gaat natuurlijk niet werken,
                      omdat de afruimploeg in principe uit zou kunnen gaan van speling (want is erna toch vrij).

NOTES/SUGGESTIONS:
- touch = 0/1: geen reserveerbuttons tonen indien geen touch
- autorefresh
- class op de boddy die togglet tussen vrij/bezet, waardoor background groen/rood kan togglen

*/
%>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/persoonselector.inc" -->
<!-- #include file="./mobile.inc" -->
<!-- #include file="../res/res_plan_room.inc" -->
<!-- #include file="../res/res.inc" -->
<!-- #include file="./iface.inc" -->
<!-- #include file="../Shared/discxalg3d.inc"-->
<%
    var RuimteMode = false;
    var DeelMode = false;
    var res_noshowgrace = 5*60*1000 ;  // hoeveel milliseconden na aanvang mag je een (lege) bezette ruimte afpakken?
    // Gebruik de Oracle tijd als startpunt. Van een noshow is de eindtijd op de Oracle TRUNC(SYSDATE, 'MI')
    // gezet en je komt anders in de de problemen als Oracle een minuut voorloopt
    var now = new Date(Oracle.Execute("SELECT TRUNC(SYSDATE, 'MI') FROM DUAL")(0));

    var ins_key = getQParamInt("ins_key", -1);
    var res_ruimte_key = -1;
    var res_deel_key = getQParamInt("res_deel_key", -1);
    if (ins_key != -1 || res_deel_key != -1)
    {
        // Objectenmode
        DeelMode = true;
        if (res_deel_key == -1)
        {
            sql = "SELECT MAX(res_deel_key) res_deel_key FROM res_deel WHERE res_deel_verwijder IS NULL AND res_ins_deel_key="+ins_key;
            var oRs = Oracle.Execute(sql);
            if (!oRs("res_deel_key").value)
            {
                shared.simpel_page(L("lcl_pda_res_nietres"));
            }
            res_deel_key = oRs("res_deel_key").value;
            oRs.Close();
        }
        var sql = "SELECT ins_deel_omschrijving, ins_alg_ruimte_key"
                + "  FROM res_deel rd, ins_deel id"
                + " WHERE rd.res_deel_key = " + res_deel_key
                + "   AND rd.res_ins_deel_key = id.ins_deel_key ";
        oRs = Oracle.Execute(sql);
        var alg_ruimte_key = oRs("ins_alg_ruimte_key").value;
    }
    else
    {
        // Ruimtemode
        RuimteMode = true;
        var alg_ruimte_key = getQParamInt("alg_ruimte_key", -1);
        if (alg_ruimte_key == -1)
        {
            res_ruimte_key = getQParamInt("res_ruimte_key");
        }
        else
        {
            var enkele_ruimte = "(SELECT ra.res_ruimte_key"
                              + "   FROM res_alg_ruimte ra"
                              + "  WHERE ra.res_alg_ruimte_verwijder IS NULL"
                              + "    AND ra.alg_ruimte_key="+alg_ruimte_key
                              + "    AND 1= (SELECT COUNT(*)"
                                         + "   FROM res_alg_ruimte sra"
                                         + "  WHERE sra.res_alg_ruimte_verwijder IS NULL"
                                         + "    AND sra.res_ruimte_key = ra.res_ruimte_key"
                                         + ")"
                              + ")";
            var koppel_ruimte = "(SELECT MAX(res_ruimte_key) res_ruimte_key"
                              + "   FROM res_alg_ruimte"
                              + "  WHERE res_alg_ruimte_verwijder IS NULL"
                              + "    AND alg_ruimte_key="+alg_ruimte_key
                              + ")";
            var sql = "SELECT COALESCE("+enkele_ruimte+","+koppel_ruimte+") res_ruimte_key"
                    + "  FROM dual";

            var oRs = Oracle.Execute(sql);
            if (!oRs.eof) {
                res_ruimte_key = oRs("res_ruimte_key").value||-1;
            }
            oRs.Close();
        }
        // res_ruimte_key is nu geldig of null
    }
    var submitting = getQParamInt("submit", 0) == 1;
    var qrc = getQParamInt("qrc", 0) != 0;

    var transitParam = buildTransitParam(["res_ruimte_key", "res_deel_key"]);

    if (res_ruimte_key < 0 && res_deel_key < 0)
    {
        shared.simpel_page(L("lcl_pda_res_nietres"));
    }

    // Zoek 'default' activiteit
    if  (RuimteMode)
    {
        sql = " SELECT rr.res_discipline_key "
            + "   FROM res_ruimte rr"
            + "  WHERE rr.res_ruimte_key = " + res_ruimte_key;
        var soort = 0; // reserveerbare ruimtes
    }
    else
    {
        sql = " SELECT rd.res_discipline_key "
            + "   FROM res_deel rd"
            + "  WHERE rd.res_deel_key = " + res_deel_key;
        var soort = 1; // algemene ruimtes
    }
    oRs = Oracle.Execute(sql);
    var res_disc_key = oRs("res_discipline_key").value;

    sql = " SELECT MIN (ra.res_activiteit_key) res_activiteit_key "
        + "   FROM res_activiteitdiscipline ad, "
        + "        res_activiteit ra,"
        + "        res_srtactiviteit rs"
        + "  WHERE ad.res_discipline_key = " + res_disc_key
        + "    AND ra.res_activiteit_key = ad.res_activiteit_key"
        + "    AND rs.res_srtactiviteit_key = ra.res_srtactiviteit_key"
        + "    AND res_srtactiviteit_soort = " + soort;
    oRs = Oracle.Execute(sql);
    res_activiteit_key = oRs("res_activiteit_key").value;
    oRs.Close();

    // Nu we de discipline hebben kunnen we ook wat autorisatiecontrole doen
    // Omdat PDA reserveren vaak ad-hoc is zijn we wat flexibeler over
    // alg_scope en dergelijke dan anders
    authparams = user.checkAutorisation("WEB_RESUSE", false, res_disc_key);

%><html>
<head>
<% FCLTMHeader.Generate({title: L("lcl_mobile_reserveringen")});

    if (getQParamInt("modal",0)==1)
    { // Voorkom te groot scherm als modal popup
 %>
    <style>
        .ui-mobile,.ui-mobile .ui-page {min-height:100px}
    </style>
<% } %>
    <script type='text/javascript'>
      function reserveer(tot)
      {

        var data = { <% if (RuimteMode) { %>
                        restype: "R",
                        res_ruimte_key: <%=res_ruimte_key%>,
                     <% } else { %>
                        restype: "CV",
                        ruimtekey: <%=alg_ruimte_key%>,
                     <% } %>
                     date_from: <%=now.getTime()%>, // Tijd waarop dialoog geopend. Voorkomt dat als je na een paar
                     date_to: tot,                  // minuten klikt de tijdsduur mogelijk te kort geworden is
                     sel_activity: <%=res_activiteit_key%>,
                     ab_mode: 0+2, // altijd 'afhalen' in de ruimte zelf, meteen vastzetten
                     status_fo: 2,
                     account: -1,
                     nodirty: 1, // willen we echt niet
                     person: $("#person").val(),
                     personH: $("#person").val(),
                     descript: "<%=safe.jsstring(L("lcl_pda_res_gereserveerd"))%>",
                     opmerk: "<%=safe.jsstring(L("lcl_pda_res_geresopmerk"))%>"
                   };
        <% protectRequest.dataToken("data"); %>

        $.post("../res/res_edit_rsv_ruimte_save.asp?urole=fo&adhoc=1&res_deel_key=<%=res_deel_key%>", data, McltCallbackRefresh, "json");
        return true;
      }

      function resShow(key,welniet)
      {
          data = { bezshown: 0,
                   reseteindtijd: 1
                  };
          if (welniet == 1)
            data.resetshown = 1;
        <% protectRequest.dataToken("data"); %>
          $.post("../res/res_noshow_save.asp?urole=fo&rsv_ruimte_key=" + key, data, McltCallbackRefresh, "json");
      }
      $(function () {
        $("[data-role=collapsible]").bind( "expand collapse", function(event, ui) {
            FcltMgr.resized();
        });
      });
    </script>
    </head>
<%
    if (RuimteMode)
    {
        var sql = "SELECT "+lcl.xsqla('rr.res_ruimte_nr', 'rr.res_ruimte_key')+","
                +         lcl.xsqla('rr.res_ruimte_omschrijving', 'rr.res_ruimte_key')+","
                + "       res_ruimte_image,"
                + "       COALESCE(res_ruimte_begintijd, " + S("res_t1") + ") begintijd,"
                + "       COALESCE(res_ruimte_eindtijd, " + S("res_t2") + ") eindtijd,"
                + "       rr.res_discipline_key"
                + "  FROM res_ruimte rr, res_disc_params rdp, res_discipline rd,"
                + "  res_activiteitdiscipline ad, res_activiteit ac"
                + " WHERE rr.res_ruimte_key = " + res_ruimte_key
                + "   AND rr.res_discipline_key = rd.ins_discipline_key "
                + "   AND rr.res_discipline_key = rdp.res_ins_discipline_key"
                + "   AND rd.ins_discipline_key = ad.res_discipline_key"
                + "   AND ad.res_activiteit_key = ac.res_activiteit_key";
        oRs = Oracle.Execute(sql);
        var res_ruimte_nr = oRs("res_ruimte_nr").Value;
        var ruimte_omschrijving = oRs("res_ruimte_omschrijving").Value;
        var rbegintijd = oRs("begintijd").Value;
        var reindtijd = oRs("eindtijd").Value;
        oRs.Close();

        if (rbegintijd < S("res_t1")) rbegintijd = S("res_t1");
        if (reindtijd > S("res_t2")) reindtijd = S("res_t2");
        if (rbegintijd > reindtijd) rbegintijd = reindtijd;
    } else {
        var sql = "SELECT ins_deel_omschrijving"
                + "  FROM res_deel rd, ins_deel id"
                + " WHERE rd.res_deel_key = " + res_deel_key
                + "   AND rd.res_ins_deel_key = id.ins_deel_key ";
        oRs = Oracle.Execute(sql);
        var res_deel_omschrijving = oRs("ins_deel_omschrijving").Value;
        oRs.Close();
        rbegintijd = S("res_t1");
        reindtijd = S("res_t2");
    }

// Suggestie: t1 niet aanbieden als dat minder dan 15 minuten is

// Selecteer de nabije reserveringen van deze ruimte, lopende of aanstaand
// Werkt niet goed bij de dagovergangen (waar alleen ontwikkelaars last van hebben)

    if (RuimteMode) // TODO: DIT HOUDT NOG GEEN REKENING MET KOPPELZALEN!
    {
        // Zoek alle bestaande reserveringen op deze ruimte die nog bezig zijn of komen
        sql = "SELECT rm.res_reservering_key,"
            + "       rm.res_rsv_ruimte_volgnr,"
            + "       rm.res_rsv_ruimte_key,"
            + "       rm.res_rsv_ruimte_omschrijving,"
            + "       res_rsv_ruimte_van,"
            + "       res_rsv_ruimte_tot,"
            + "       res_disc_params_preposttime,"
            + "       " + S("prs_pers_string") + " contact"
            + "  FROM res_disc_params dp, "
            + "       res_rsv_ruimte rm,"
            + "       res_ruimte_opstelling ro,"
            + "       res_ruimte r,"
            + "       prs_perslid p"
            + " WHERE     res_rsv_ruimte_van BETWEEN TRUNC (SYSDATE) AND TRUNC (SYSDATE) + 1" // Alleen vandaag
            +  "      AND res_rsv_ruimte_tot BETWEEN  (SYSDATE) AND TRUNC (SYSDATE) + 1" // All(een) lopende en toekomstige reserveringen
            + "       AND rm.res_ruimte_opstel_key = ro.res_ruimte_opstel_key"
            + "       AND ro.res_ruimte_key = r.res_ruimte_key"
            + "       AND r.res_ruimte_key = " + res_ruimte_key
            + "       AND r.res_discipline_key = dp.res_ins_discipline_key"
            + "       AND rm.res_rsv_ruimte_contact_key = p.prs_perslid_key"
            + "       AND rm.res_rsv_ruimte_verwijder IS NULL"
            + "       AND (res_rsv_ruimte_bezoekers_shown IS NULL OR res_rsv_ruimte_bezoekers_shown > 0)" // NoShow?
            + "       AND rm.res_rsv_ruimte_dirtlevel = 0"
            + " ORDER BY rm.res_rsv_ruimte_van"; // Eerste vooraan.
    } else {
        sql = "SELECT rm.res_reservering_key,"
            + "       rm.res_rsv_ruimte_volgnr,"
            + "       rm.res_rsv_ruimte_key,"
            + "       rm.res_rsv_ruimte_omschrijving,"
            + "       res_rsv_ruimte_van,"
            + "       res_rsv_ruimte_tot,"
            + "       0 res_disc_params_preposttime,"
            + "       " + S("prs_pers_string") + " contact"
            + "  FROM res_rsv_ruimte rm,"
            + "       res_rsv_deel rd,"
            + "       res_ruimte r,"
            + "       prs_perslid p"
            + " WHERE     res_rsv_ruimte_van BETWEEN TRUNC (SYSDATE) AND TRUNC (SYSDATE) + 1" // Alleen vandaag
            +  "      AND res_rsv_ruimte_tot BETWEEN  (SYSDATE) AND TRUNC (SYSDATE) + 1" // Alleen lopende en toekomstige reserveringen
            + "       AND rd.res_rsv_ruimte_key = rm.res_rsv_ruimte_key"
            + "       AND rd.res_deel_key = " + res_deel_key
            + "       AND rm.res_rsv_ruimte_contact_key = p.prs_perslid_key"
            + "       AND rm.res_rsv_ruimte_verwijder IS NULL"
            + "       AND rd.res_rsv_deel_verwijder IS NULL"
            + "       AND rd.res_rsv_deel_dirtlevel = 0"
            + " ORDER BY rm.res_rsv_ruimte_van"; // Eerste vooraan.
    }
%>
  <body class="resruimte">
<%

    // TODO: een list(!) van de reserveringen vanaf nu (reeds begonnen) tot einde van de dag
    // Daar kan ik op klikken en dan.... of...?
//    BLOCK_START({collapsed: false, title: L("lcl_mobile_res_today")});

    if (RuimteMode)
        var periods = S("res_pda_room_times"); // Let op: alles moet deelbaar zijn door 'blokgrootte' S("res_h") en groter zijn dan S("res_block")
    else
        var periods = S("res_pda_deel_times"); // ['15','30','60','120','240']
    for (var i in periods) // Het zijn altijd strings
        periods[i] = parseInt(periods[i]);

    var maxTime = now.setFloatHours(reindtijd);
    var minuten = now.getHours() * 60 + now.getMinutes();
    var blokstart = Math.ceil(minuten / (S("res_h")*60)) * S("res_h")*60; // omhoog afgerond op period[0]
    var times = [];
    if ((blokstart/60) < reindtijd)
    { // Start reservering is voor dag eind tijd (res_t2)
      for (var i in periods)
      {
          var blokend = blokstart + periods[i];
          var tm = new Date(now);
          tm.setHours(Math.floor(blokend / 60));
          tm.setMinutes(blokend % 60, 0, 0);
          // Voor tmplus periods[0] toegevoegd: Als er in de tijd die overblijft toch geen reservering meer kan plaatsvinden dan eindtijd gelijk maken aan de eindtijd van de dag.
          // Hiervoor tmplus voor gebruiken (tm + periods[0] > maxTime) => (tmplus > maxTime). Als (tmplus = maxTime) dan kan er nog een reservering met periods[0] plaatsvinden
          var blokend = blokstart + periods[i] + periods[0];
          var tmplus = new Date(now);
          tmplus.setHours(Math.floor(blokend / 60));
          tmplus.setMinutes(blokend % 60, 0, 0);
          if (tmplus > maxTime) // periods[0] toegevoegd: Als er in de tijd die overblijft toch geen reservering meer kan plaatsvinden dan eindtijd gelijk maken aan de eindtijd van de dag.
          {
            times.push(maxTime);
            break; // Voorkom nog een regel tot eindtijd
          }
          else
            times.push(tm);
      }
    }
    // times bevat nu potentiele start-tijdstippen

    var nubezet = false;
    var helemaalvrij = false;
    var oRs = Oracle.Execute( sql );
    if (!oRs.eof)
    {
        var rsv_omschrijving = oRs("res_rsv_ruimte_omschrijving").Value;
        var rsv_contact = oRs("contact").Value;
        var rsv_ruimte_key = oRs("res_rsv_ruimte_key").Value;
        var van = new Date(oRs("res_rsv_ruimte_van"));
        var tot = new Date(oRs("res_rsv_ruimte_tot"));
        var prepost = oRs("res_disc_params_preposttime").Value || 0; // in uren
        var schoonvan = new Date(van);
        schoonvan.setMinutes(schoonvan.getMinutes() - prepost * 60);
        if (schoonvan < times[0] && tot > now) // Bezig of begin binnen half uur
        {
            var nubezet = true;
        }
    }
    else { // helemaal vrij
        helemaalvrij = true;
    }
    oRs.Close();

    PAGE_START({pclass: (nubezet ? "pbezet" : "pvrij") });
    HEADER ({title: safe.html(RuimteMode ? res_ruimte_nr : res_deel_omschrijving), back:!qrc, home: !qrc});
    CONTENT_START({pclass: (nubezet ? "dbezet" : "dvrij") });

    if (nubezet)
    {
        %><div class="cbezet"><%
            // We zeggen tot wanneer de huidige reservering loopt. Garandeert niet dat die erna wel vrij is
            // Functioneel zou je je het einde van de laatste (aansluitende) reservering willen laten zien
            // Dus wanneer is-ie weer vrij (binnen de openingstijden).
            Response.write("<div class='bezet'>"+L("lcl_mobile_ruimtebezet").format(toTimeString(tot))+"</div>");
            // Dit is eigenlijk niet relevant voor een normale gebruiker
            // maar voor een eventuele noshow wel!
            // KFNS#35010: ook tonen als het toch geen geheim is
            if (user.checkAutorisation( "WEB_RESNOS", true) || (planbordTooltipShowing(rsv_ruimte_key) == 1))
            {
                Response.write("<span class='bezetinfo'>"+toTimeString(van)+" - "+toTimeString(tot)+": "+ safe.html(rsv_omschrijving)+"/"+safe.html(rsv_contact)+"</span>");
            }
        %></div><%
    }
    else {
        if ( !helemaalvrij )
        {
            // nu vrij, maar naderende reservering om 'van' (dat ligt binnen ???)
            %><span class="cvrij"><%
            Response.write("<div class='vrij'>"+L("lcl_mobile_res_next").format(toTimeString(van))+"</div>");
            %></span><%
        }
        else
        {
            %><div class="cvrij"><%
            Response.write("<div class='vrij'>"+safe.html(RuimteMode ? res_ruimte_nr : res_deel_omschrijving)+"</div>")
            //Response.write("<div class='vrij'>"+L("lcl_mobile_res_ruimtevrij")+"</div>");
            %></div><%
            van = null; // er is geen eerstvolgende in de weg
        }
    }

//    BLOCK_END();

      %><form id="resform" name="resform" action="reserveringen.asp?submit=1<%=transitParam%>" method="post"><%

      // TODO: als ik niet bekend ben (bijvoorbeeld doordat ik via een QRC-API call kom,
      // nu wellicht zelfs in de FAC_API tabel te bepalen(!) een persoon laten kiezen
/*  JGL: Volgens mij moet dit sinds 5.2.3 meer iets worden als: if (user.isGroupedUser()) o.i.d.
        tsql = "SELECT COUNT(*) FROM fac_api WHERE prs_perslid_key="+user_key;
        var toRs = Oracle.Execute( tsql );
        if (toRs(0).value > 0)
        {
            if (times[0] <= van)
            {
                FCLTpersoonselector("person",
                                    "sgPerson",
                                    { label: L("lcl_name")+"TODO!",
                                      initKey: user_key,
                                      moreinfo: false,
                                      autlevel: -1, // je mag iedereen kiezen?
                                      required: true,
                                      mobile: true
                                    });
            }
        } else {
        }
        toRs.Close();
*/
            // Ik ben een echte user, de reservering gaat stilzwijgend op mijn eigen naam
            %><input type="hidden" name="person" id="person" value="<%=user_key%>"><%
      if (authparams.ALGwritelevel < 9 && authparams.PRSwritelevel < 9)
      {
        for (var tm in times)
        {
        //if (t0 && !t1) {
        //    BUTTON(L("lcl_pda_res_ruimtereserveer")+' '+toTimeString(t0), {click: "reserveer("+ t0.getTime()+")", dataicon: "star"});
        //}
        if (!van || times[tm] <= schoonvan)
        {
            BUTTON(L("lcl_pda_res_ruimtereserveer").format(toTimeString(times[tm]), periods[tm]), {click: "reserveer("+ times[tm].getTime()+")", dataicon: "star"});
        }
      // TODO: slider van maken?
//        if (t1||t2||t3) {
//           <labe>Duur</label><input name="duur" type="range" min="0.5" max="2" step="0.5">
//        }
        }
        if (nubezet && now - van > res_noshowgrace
                    && res_noshowgrace > -1 /* EN minstens res_noshowgrace na aanvang */
                    && !DeelMode // ondersteunen we (nog) niet
                    && user.checkAutorisation( "WEB_RESNOS", true))
        {
            // Maybe next time: BUTTON(L("lcl_res_show"), {click: "resShow("+rsv_ruimte_key+", 1)", dataicon: "check"});
            BUTTON(L("lcl_res_no_show"), {click: "resShow("+rsv_ruimte_key+", 0)", dataicon: "delete"});
        }
        // geen FcltMgr ... BUTTON(L("lcl_cancel"), {click: "FcltMgr.closeDetail(window, { cancel: true } )", dataicon: "delete"});
     }
%>
      </form>
<%
    if (RuimteMode)
    {
        // Nog wat algemene ruimteinfo mogelijk van belang voor het reserveren
        var sql = "SELECT rar.alg_ruimte_key,"
                + "       ar.alg_ruimte_nr,"
                +         lcl.xsqla('rd.ins_discipline_omschrijving', 'rd.ins_discipline_key')
                + "  FROM res_ruimte rr"
                + "     , res_alg_ruimte rar"
                + "     , alg_ruimte ar"
                + "     , ins_tab_discipline rd"
                + " WHERE rar.res_ruimte_key = rr.res_ruimte_key "
                + "   AND rar.alg_ruimte_key = ar.alg_ruimte_key "
                + "   AND rd.ins_discipline_key = rr.res_discipline_key "
                + "   AND res_alg_ruimte_verwijder IS NULL"
                + "   AND rar.res_ruimte_key = " + res_ruimte_key;
        var oRs = Oracle.Execute( sql );

        var res_ruimte_data = res.res_ruimte_info(res_ruimte_key);
        if (res_ruimte_data.imagePath) {
           %><div class="resphoto"><img id="resphoto" src="<%=res_ruimte_data.imagePath%>"></div><%
        }

        ROFIELD("resoms", "", ruimte_omschrijving, {multi:true});
        // Bezetting van vandaag:
        var nr_days = 1; // We hebben maar één dag aan info.
        var width_px = getQParamInt("width_px", 350);
        var hour_px = res.hour_px(width_px - 0, nr_days);

        var html = [ '\n<div class="resplan"><table id="tab_room_sched" cellspacing="0" hour_px="' + hour_px + '" ',
                            ' class="compressed planbord planbord'+hour_px+' multiday">'];
        html.push(res.build_planbord_tijdbalk(null/*datum*/, nr_days, hour_px, res_ruimte_data.begintijd, res_ruimte_data.eindtijd));

        var authparams = user.checkAutorisation("WEB_RESUSE");
        var resparams = {
                           res_van: new Date().setFloatHours(res_ruimte_data.begintijd, S("res_h")),
                           res_tot: new Date().setFloatHours(res_ruimte_data.eindtijd, S("res_h")),
                           res_ruimte_key: res_ruimte_key,
                           ruimtecat: [],
                           authparams: authparams,
                           anonymous: true // minimale informatie
                        };

        var plan_bezet_info = res.plan_bezet_info(resparams);
        html.push("<tr>");
            html.push(make_plan_regel(res_ruimte_data, plan_bezet_info[res_ruimte_key], resparams, nr_days, hour_px));
        html.push("</tr></table></div>");

        Response.Write(html.join("\n"));
        Response.Write("<p/>")
        // Button naar alg-ruimte is vervallen bij gebrek aan zin
    }
    CONTENT_END();
    FOOTER({modal: qrc});
    PAGE_END();
%>
</body>
</html>
