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

    File:               res_search_plan_room.asp
    Remark:             Toon ruimte planbord
    Parameters:
    Context:            vanuit res_search.asp
*/ %>

<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../shared/iface.inc" -->
<!-- #include file="../Shared/discxalg3d.inc"-->
<!-- #include file="res_plan_room.inc" -->
<!-- #include file="../Shared/json2.js" -->
<!-- #include file="res.inc" -->
<%
FCLTHeader.Requires({plugins: ["jQuery"],
                        js  : ["jquery-ui.js"]}); // Voor slepen

var res_ruimte_key = getQParamInt("res_ruimte_key", -1); // Filter specifieke vergaderzaal
var vis = getQParamInt("vis", 0);
var srtact = getFParamInt("srtact", -1);
var autosearch = getFParamInt("autosearch", 0) == 1;

var urole = getQParamSafe("urole");
var autfunction = "";
switch(urole)
{
  case "fe": autfunction = "WEB_RESUSE";
             break;
  case "fo": autfunction = "WEB_RESFOF";
             break;
  case "bo": autfunction = "WEB_RESBOF";
             break;
  case "mi": autfunction = "WEB_RESBAC";
             break;
}
var authparams = user.checkAutorisation(autfunction);

//dateoffset wordt voor deeplinking gebruikt!(?)
dateoffset = getQParamInt("dateoffset",0)*24*60*60*1000;
var defDate = new Date();
defDate.setDate(defDate.getDate() + dateoffset);

// Bij wijze van uitzondering mogen date_from en date_to ook uit de QueryString komen voor deeplinking
var date_from = getQParamDate("date_from", getFParamDate("date_from", defDate));
var date_to = getQParamDate("date_to", getFParamDate("date_to", date_from));

var samedate = (date_from.getTime() == date_to.getTime());
var ruimtecat = getFParamIntArray("roomcatmulti", []); // Ruimte soort catalogus
var act_key = getFParamInt("act", -1);
if (act_key > 0)
{ // Voeg de disciplines van de activiteit aan de ruimtecatalogus toe.
  var sql = "SELECT res_discipline_key"
          + "  FROM res_activiteitdiscipline"
          + " WHERE res_activiteit_key = "+act_key;
  var oRs = Oracle.Execute(sql);
  while (!oRs.eof)
  {
    ruimtecat.push(oRs("res_discipline_key").value);
    oRs.MoveNext();
  }
  oRs.Close();
}


var fnStep = getFParam("fnStep", null); // Clientside functie voor Next/Prev

// Bereken dynamisch breedte blokjes
// PAS OP: identiek houden aan res_plan_room.inc!
var width_px = getQParamInt("width_px", 1024);
var nr_days = Math.round(1+(date_to.midnight() - date_from.midnight())/24/60/60/1000);
hour_px = res.hour_px(width_px-300, nr_days);
%>

<html style='overflow:scroll'>
  <head>
<%  FCLTHeader.Generate(); %>
<%  // Ruimtes mogen alleen horizontaal gewijzigd worden, je mag geen andere ruimte kiezen in het planbord
    // Dat heeft mogelijk veel te veel consequenties
%>
    <style>
      div.ui-resizable-handle { xbackground-color:red;
                                background-image: url(../localscripts/theme/images/ui-icons_888888_256x240.png);
                                background-position: -4px -225px; }
      div.ui-resizable-w  { left: 0px; }
      div.ui-resizable-e  { right: 0px; }
    </style>
    <script type="text/javascript">
      <% // TODO: Wel erg hardcoded
        var extern_flex = customerId + " gebruiker: " + user.naam()
                         + "\nE-mail:" + user.prs_perslid_email()
                         + "\n" + customerId + " kostenplaats: " + user.kpn_string();
      %>
      var extern_flex = "Flex voor externen=<%=safe.jsstring(extern_flex)%>";
      function res_print()
      {
         FcltMgr.setHeaderExtraTitle("<%=toDateString(date_from)%>");
         window.print();
      }
      function res_change()
      {
          var hour_px = $("#tab_room_sched")[0].getAttribute("hour_px");
          var blokje = hour_px * <%=safe.jsfloat(S("res_h"))%>;
          var startx; // start positie van het slepen (left);
          var starty; // start positie van het slepen (top);
          $('div.gepland:not(.res_nietvrij,.overflowright,.overflowleft.continueright,.continueleft,.extern)').resizable(
                 { containment: '#tab_room_sched',
                   grid: [blokje, 12],
                   handles: 'e, w',
                   //ghost: true,
                   start: function (event, ui)
                          {
                            window.beingdragged = true; /* to prevent onclick */
                          },
                   stop: function (event, ui)
                         {
                           var dvan = Math.floor((ui.position.left - ui.originalPosition.left) / blokje + 0.5);
                           var dwidth = Math.floor((ui.size.width - ui.originalSize.width) / blokje + 0.5);
                           var elm = ui.originalElement;
                           FcltMgr.stopPropagation(event);
                           //window.beingdragged = false;  doet rsv_click wel
                           var data = { rsv_ruimte_key: elm[0].getAttribute("rsv_key"),
                                          dvan: dvan,
                                          dwidth: dwidth
                                        };
                           <% protectRequest.dataToken("data"); %>
                           $.post("res_update_room.asp",
                                  data,
                                  function (json)
                                  {
                                    if (json.message) alert(json.message);
                                    if (json.info)
                                      FcltMgr.setHeaderExtraTitle(json.info);
                                    else
                                      FcltMgr.setHeaderExtraTitle("");
                                    if (json.success)
                                    {
                                      ui.originalElement[0].title="";
                                      ui.originalElement.removeClass(json.removeClass).addClass(json.addClass)
                                    }
                                    else
                                    {
                                      ui.originalElement.width(ui.originalSize.width);
                                      ui.originalElement.css('left', ui.originalPosition.left);
                                    }
                                  },
                                  "json");
                         }
                 });
          $('.plantd').droppable(
                       { drop: function(event, ui)
                               {
                                 var jtr = $(this).closest('tr');
                                 // Externe ruimten mogen niet versleept worden en ruimten mogen niet naar een externe ruimte versleept worden.
                                 if (ui.draggable.closest('tr').hasClass("extern") || jtr.hasClass("extern"))
                                   return;
                                 // Langs welke as wordt er nu verschoven?
                                 // X-as: ruimte blijft hetzelfde (res_ruimte_key blijft hetzelfde)
                                 // Y-as: Tijd blijft hetzelfde (fres_van blijft hetzelfde)
                                 var axis = ui.draggable.draggable("option", "axis");

                                 // LET OP: Het verschoven blok is met of zonder schoonmaaktijd. En schoonmaaktijd wordt in het planbord niet goed bepaald en is altijd 1 blokje
                                 old_dx = startx - jtr.find('.plantd').offset().left;
                                 new_dx = ui.offset.left - jtr.find('.plantd').offset().left;
                                 old_dx = old_dx / <%=hour_px%> + <%=safe.jsfloat(S("res_t1"))%>;
                                 new_dx = new_dx / <%=hour_px%> + <%=safe.jsfloat(S("res_t1"))%>;
                                 var rsv_ruimte_key = ui.draggable[0].getAttribute("rsv_key"); // nieuwe rsv_ruimte_key
                                 var new_res_ruimte_key = $(this).closest('tr')[0].id; // nieuwe res_ruimte_key
                                 var old_res_ruimte_key = ui.draggable.closest('tr')[0].id; // oorspronkelijke res_ruimte_key

                                 // Als er niets gewijzigd is dan modal popup scherm niet tonen
                                 var noChange = (axis == "x" && old_dx == new_dx) || (axis == "y" && new_res_ruimte_key == old_res_ruimte_key)
                                 if (new_res_ruimte_key &&
                                     !noChange)
                                 {
                                   var url = "./res_update_room_drag.asp?rsv_ruimte_key=" + rsv_ruimte_key
                                           + "&res_ruimte_key=" + (axis == "x"? old_res_ruimte_key : new_res_ruimte_key)
                                           + "&fres_van=" + (axis == "y"? old_dx : new_dx); // LET OP: dx is met of zonder schoonmaaktijd. En schoonmaaktijd wordt in het planbord niet goed bepaald en is altijd 1 blokje
                                   FcltMgr.openModalDetail(url,
                                                           "",
                                                           { callback: function (data)
                                                                       {
                                                                         if (data.refresh)
                                                                         {
                                                                           <% if (fnStep)
                                                                                Response.Write(fnStep + "(0, 0, 1)"); // hersubmit vanuit parent
                                                                           %>
                                                                         }
                                                                       }
                                                           }
                                                          );
                                 }
                               }
                       });

          $('table.planbord').each(function ()
                   {
                     var x, y;
                     var element = $(this).find('div.gepland:not(.overflowleft,.overflowright)');
                     element.draggable(
                             { cursor: 'crosshair' ,
                               containment: $(this), //.find(".plantd.reserv"),
                               start: function(event, ui)
                                      {
                                        window.beingdragged = true; /* to prevent onclick */
                                        x = event.originalEvent.pageX;
                                        y = event.originalEvent.pageY;
                                        startx = ui.offset.left; // start positie van het slepen (left);
                                        starty = ui.offset.top; // start positie van het slepen (top);
                                      },
                               drag: function(event, ui)
                                     {
                                       if (x && y)
                                       {
                                         axis = Math.abs(event.originalEvent.pageX - x) > Math.abs(event.originalEvent.pageY - y) ? 'x' : 'y';
                                         element.draggable('option', 'axis', axis);
                                         x = y = null;
                                       }
                                     },
                               stop: function()
                                     {
                                       x = y = null;
                                       element.draggable('option', 'axis', false);
                                     },
                               helper: 'clone',
                               opacity: 0.50,
                               appendTo: this,
                               grid: [<%=hour_px*S("res_h")%>, 19],
                               scroll: false//,
                               //axis: "xy"
                             });
                   });
          $("#btnchange").html(L("lcl_res_edit_inplanbord"));
      }
<%    if (autosearch && samedate)
      { %>
        $(document).ready(function()
                          {
                            res_change();
                          });
<%    } %>
      $(document).ready(function () {clearTimeout(window.bltimeid); $('#busyloading').hide() });
    </script>
  </head>

  <body id="planbody">
<%
    Response.Write("<div id='busyloading' style='position:absolute;z-index:-100;'>");
    // Na één seconde gaatie pas aan
    // Let op: vertrouw er niet op de we jQuery al hebben
    Response.Write("<img id='busyloadingimg' style='display:none' onload=\"window.bltimeid=setTimeout('document.getElementById(\\\'busyloadingimg\\\').style.display=\\\'block\\\';FcltMgr.resized();', 1000);\" src='"+rooturl+"/appl/Pictures/busyloading.gif'>");
    Response.Write("</div>");
    Response.Flush();

    var buttons = [];
    if (authparams.PRSwritelevel < 9 && authparams.ALGwritelevel < 9 && samedate)
        buttons.push({ icon: "wijzigen.png", title: L("lcl_change"), action: 'res_change()', singlepress: true, id: "btnchange" });
    buttons.push({ icon: "legenda.png",  title: L("lcl_res_legenda"), action: 'openLegenda()' });
    buttons.push({ icon: "print.png",  title: L("lcl_print_table"), action: 'res_print()' });

    IFRAMER_HEADER(L("lcl_planboard"), buttons);
%>
    <div id="list">
<%
      var params = { id: "tab_room_sched",
                     res_van: date_from,
                     res_tot: date_to,
                     reg: getFParamInt("regiokey", -1),
                     dist: getFParamInt("districtkey", -1),
                     loc: getFParamInt("locatiekey", -1),
                     bld: getFParamInt("gebouwkey", -1),
                     ver: getFParamInt("verdiepingkey", -1),
                     rui: getFParamInt("ruimtekey", -1),
                     ruimtecat: ruimtecat,
                     srtact: (srtact != -1? srtact : null),
                     act: act_key,
                     res_ruimte_key: (res_ruimte_key != -1? res_ruimte_key : null),
                     authparams: authparams,
                     host_key: getFParamInt("sHost_key",-1),
                     contact_key: getFParamInt("sName_key",-1),
                     urole: urole,
                     fnStep: fnStep,
                     width_px: width_px };
      var plan_rooms_info = res.plan_rooms_info(params);
      var plan_bezet_info = res.plan_bezet_info(params);
      var nnregels = make_plan_room(plan_rooms_info, plan_bezet_info, params);
%>
    </div>
<table>
<%
    // Overzicht externe ruimtes
    var sql = res.getremotes_sql(autfunction);
    var oRs = Oracle.Execute(sql);
    // Als je hier weet dat er intern niks was zou je deze externe opties initieel opengeklapt willen?
    while( !oRs.eof )
    {
    %>
        <tr>
            <td>
              <div class="resexternline closed">
                   <span class="resexterntitle" onclick="$(this.parentElement).toggleClass('closed');FcltMgr.resized()">
                     <%= L("lcl_res_extern_prefix") + Server.HTMLencode(oRs("ins_discipline_omschrijving").Value)%>
                   </span>
                  <div class="resexterndiv">
    <%
        var url = oRs("res_disc_params_remoteurl").Value + "&API=RESINFO";
        var xparams = { res_van: params.res_van,
                        res_tot: params.res_tot,
                        res_vis: params.vis,
                        prs_externId: customerId + "_" + String(user_key)
                      }
        if (params.loc) // Aan de andere kant kennen we onze key niet, daarmo via plaats.
            xparams.alg_locatie_plaats = new Locatie(params.loc).alg_locatie_plaats();

        xparams.request = "plan_rooms_info";
        var plan_rooms_info = HTTP.getJSON(url, { data: xparams }).plan_rooms_info;
        xparams.request = "plan_bezet_info";
        var plan_bezet_info = HTTP.getJSON(url, { data: xparams }).plan_bezet_info;
        xparams.extern = true;

        params.disc_key = oRs("ins_discipline_key").Value;
        params.noclicker = true; // die hebben we al gehad.
        if (plan_rooms_info && plan_bezet_info)
            nnregels += make_plan_room(plan_rooms_info, plan_bezet_info, params);
    %>
                  </div>
              </div>
            </td>
        </tr>
    <%
        oRs.MoveNext();
    }
    oRs.close();
%>
</table>
<%
// Genereer ruimte voor popupje bij kleine planborden
while (nnregels < 8)
{
    Response.Write("<p>&nbsp;</p>");
    nnregels ++;
}
%>
<!-- LEGENDA  -->
<script type="text/javascript">
    function openLegenda()
    {
        params = { width: 170,
                   resizable: false,
                   position: {my: "right top", at: "right top+35"},
                   title: "<%=L("lcl_res_legenda")%>"
                 }
        $('div#legenda').dialog(params).dialog('open');
    }
</script>
    <div id="legenda" style="display:none;">
      <table id="planbordlegenda">
      <tr>
        <td align="right"><img src="../Pictures/room_clean.gif"></td>
        <td><% = L("lcl_r_clean") %></td>
        </tr>
        <tr>
        <td align="right"><img src="../Pictures/room_opt.gif"></td>
        <td><% = L("lcl_optie") %></td>
        </tr>
        <tr>
        <td align="right"><img src="../Pictures/room_opt_own.gif"></td>
        <td><% = L("lcl_optie_own") %></td>
        </tr>
        <tr>
        <td align="right"><img src="../Pictures/room_def.gif"></td>
        <td><%= L("lcl_def") %></td>
        </tr>
        <tr>
        <td align="right"><img src="../Pictures/room_def_own.gif"></td>
        <td><%= L("lcl_def_own") %></td>
        </tr>
        <tr>
        <td align="right"><img src="../Pictures/room_blk.gif"></td>
        <td><% = L("lcl_blokkade") %></td>
        </tr>
        <tr>
        <td align="right"><img src="../Pictures/room_vvl.gif"></td>
        <td><% = L("lcl_vervallen") %></td>
        </tr>
        <tr>
        <td align="right"><img src="../Pictures/room_na.gif"></td>
        <td colspan=3><% = L("lcl_niet_beschikbaar") %></td>
        </tr>
<%
   if (S("res_reservering_flags") > 1)
   {
     for (flagIndex=1; flagIndex<S("res_reservering_flags"); flagIndex++)
     {
%>
        <tr>
        <td align="right"><img src="../Pictures/resflag<%=flagIndex%>.png"></td>
        <td colspan=3><% = L("lcl_res_flag" + flagIndex) %></td>
        </tr>
<%   }
  }
%>

<% if (urole != 'fe') { %>
        <tr>
        <td align="right"><img src="../Pictures/cake.png"></td>
        <td colspan=3><% = L("lcl_reserved_cons") %></td>
        </tr>
        <tr>
        <td align="right"><img src="../Pictures/television.png"></td>
        <td colspan=3><% = L("lcl_reserved_object") %></td>
      </tr>
<% } %>
        <tr>
        <td align="right"><img src="../Pictures/delete.png"></td>
        <td><% = L("lcl_dirty") %></td>
        </tr>
      </table>
    </div>
  </body>
</html>
