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

     File:           INS/ins_edit_deel.asp
     Description:    Main interface to add/edit objects

     Parameters:     ins_key: bewerken bestaand object, we 'weten' al heel veel
                     parent_key: we hebben een parent, we tonen deels info van de parent
                     urole:

     Context:        submit naar ins_edit_deel_save.asp
     Note:


*/ %>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/iface.inc" -->
<!-- #include file="../Shared/calendar.inc" -->
<!-- #include file="../Shared/kenmerk_common.inc" -->
<!-- #include file="./ins_flexkenmerk.inc" -->
<!-- #include file="../Shared/afdelingselector.inc" -->
<!-- #include file="../Shared/plaatsselector.inc" -->
<!-- #include file="../Shared/persoonselector.inc" -->
<!-- #include file="../Shared/disciplineselector.inc" -->
<!-- #include file="../Shared/srtgroepselector.inc" -->
<!-- #include file="../Shared/srtdeelselector.inc" -->
<!-- #include file="../Shared/selector.inc" -->
<!-- #include file="./ins.inc" -->

<%
FCLTHeader.Requires({plugins:["jQuery"],
                     js: ["../shared/kenmerk_js.asp", "../ins/ins_edit_deel.js", "../ins/bind.js"]})

var ins_key = getQParamInt("ins_key");
var copy = (getQParamInt("ins_copy", 0) == 1);
var urole = getQParamSafe("urole");

var ins_copy_key = -1;

var module = "INS";
if (ins_key > 0)
{
  if (ins.isSleCil(ins_key))
  {
    var autfunction = "WEB_SLEBOF";
    module = "SLE";
  }
  else
    var autfunction = getQParam("pautfunction", (urole == "fo"? "WEB_INSFOF" : "WEB_INSMAN"));
}
if (copy)
{
  ins_copy_key = ins_key;
  ins_key = -1;
}

if (ins_key > 0)
{
  var this_ins = ins.func_enabled_deel(ins_key);
  user.auth_required_or_abort(this_ins.canChange); // dat is toch wel het minste

  authparams = this_ins.authparams(autfunction);
}
else // nieuw object
{
  var disc_key  = getQParamInt("disc", -1);
  var srtgroep_key = getQParamInt("group", -1);
  var srtdeel_key = getQParamInt("sort", -1);
  var perslid_key_beh = getQParamInt("beh_key", -1);  // niet user_key

  var o_loc    = getQParamInt("locatiekey", -1);
  var o_bld    = getQParamInt("gebouwkey", -1);
  var o_floor  = getQParamInt("verdiepingkey", -1);
  var o_room   = getQParamInt("ruimtekey", -1);
  var o_workpl = getQParamInt("werkplekkey", -1);
  var o_dep    = getQParamInt("dept", -1);
  var o_perslid = getQParamInt("prs_key", -1);

  if ((srtdeel_key > 0 && ins.isSleCil(srtdeel_key, "S")) ||
      (srtgroep_key > 0 && ins.isSleCil(srtgroep_key, "G")))
  {
    autfunction = "WEB_SLEBOF";
    module = "SLE";
  }
  else
    var autfunction = getQParam("pautfunction", (urole == "fo"? "WEB_INSFOF" : "WEB_INSMAN"));

  var authparams = user.checkAutorisation(autfunction);
  var this_ins = { canChangeAlg: true };
}

var isNext = getQParamInt("next" , -1);

var free = false;

i_count = getQParamInt("count", 1);

var parent_key = getQParamInt("parent_key", -1);

var desc = bind_key = parentdesc = null;
var aanmaak = new Date();
var vervaldatum = null;
var srtcode = "";
var tekenbaar = false;
var uitvoertijd;
var uitvoertijd_eenheid;

%>
<html>
  <head>
<%  FCLTHeader.Generate(); %>
    <script>
      var sgDept, sgPerson;
      var urole = "<%=urole%>";
      var ins_key = <%=ins_key%>;
      var copy = <%=copy? 1 : 0%> == 1;
    </script>
  </head>
<%

  desc = getQParam("desc", null);
  var bind = null;

  if (o_dep > 0)
  {
    bind_key = o_dep;
    bind = "A";
  }

  if (o_perslid > 0)
  {
    bind_key = o_perslid;
    bind = "P";
  }

  if (o_workpl > 0)
  {
    bind_key = o_workpl;
    bind = "W";
  }

  if (o_bld > 0)
  {
    bind_key = o_bld;
    bind = "T";
  }

  if (o_room > 0)
  {
    bind_key = o_room;
    bind = "R";
  }

  var xcoord = getQParam("xcoord", null);
  if (xcoord == "") xcoord = null;
  var ycoord = getQParam("ycoord", null);
  if (ycoord == "") ycoord = null;
  // Future: getQParam("zcoord", null); if (zcoord == "") zcoord = null;

  srtdeel_binding = 0xFF; // Veronderstel nog even dat alles mag
  var isLendOut = false;

  var autonum = -1;
  if (parent_key > 0 || ins_key > 0 || srtdeel_key > 0 || copy)
  { // select object data...
    if (ins_key > 0 || copy)
    { // Het is een bestaand object, of er moet een kopie worden gemaakt.
      sql = "SELECT d.ins_deel_omschrijving"
          + "     , d.ins_deel_parent_key"
          + "     , d.ins_alg_ruimte_type"
          + "     , d.ins_alg_ruimte_key"
          + "     , d.ins_alg_locatie_key"
          + "     , d.ins_srtdeel_key"
          + "     , s.ins_srtgroep_key"
          + "     , g.ins_discipline_key"
          + "     , s.ins_srtdeel_acadsymbol"
          + "     , d.ins_deel_x"
          + "     , d.ins_deel_y"
          + "     , d.ins_deel_dwgx"
          + "     , ins_srtdeel_binding"
          + "     , d.ins_alg_ruimte_type_org"
          + "     , d.ins_alg_ruimte_key_org"
          + "     , s.ins_srtdeel_code"
          + "     , d.ins_deel_aanmaak"
          + "     , d.ins_deel_vervaldatum"
          + "     , pd.ins_deel_omschrijving parent_omschrijving"
          + "     , d.ins_deel_t_uitvoertijd.tijdsduur uitvoertijd"
          + "     , d.ins_deel_t_uitvoertijd.eenheid uitvoertijd_eenheid"
          + "     , d.ins_deel_opmerking"
          + "     , idp.ins_disc_params_autonum"
          + "     , d.prs_perslid_key_beh"
          + "  FROM ins_deel d"
          + "     , ins_srtdeel s"
          + "     , ins_srtgroep g"
          + "     , ins_tab_discipline dis"
          + "     , ins_deel pd"
          + "     , ins_disc_params idp"
          + " WHERE d.ins_deel_key = " + (copy? ins_copy_key : ins_key)
          + "   AND d.ins_srtdeel_key = s.ins_srtdeel_key"
          + "   AND d.ins_deel_parent_key = pd.ins_deel_key(+)"
          + "   AND s.ins_srtgroep_key = g.ins_srtgroep_key"
          + "   AND g.ins_discipline_key = dis.ins_discipline_key"
          + "   AND dis.ins_discipline_key = idp.ins_discipline_key";
    }
    else if (parent_key > 0 && ins_key < 0)
    { // Het toevoegen van een NIEUW onderdeel aan een bestaand parent-object
      sql = "SELECT '' ins_deel_omschrijving"
          + "     , d.ins_deel_parent_key"
          + "     , d.ins_alg_ruimte_type"
          + "     , d.ins_alg_ruimte_key"
          + "     , d.ins_alg_locatie_key"
          + "     , d.ins_srtdeel_key"
          + "     , s.ins_srtgroep_key"
          + "     , g.ins_discipline_key"
          + "     , s.ins_srtdeel_acadsymbol"
          + "     , d.ins_deel_x"
          + "     , ins_deel_y"
          + "     , ins_deel_dwgx "
          + "     , ins_srtdeel_binding"
          + "     , d.ins_alg_ruimte_type_org"
          + "     , d.ins_alg_ruimte_key_org"
          + "     , s.ins_srtdeel_code"
          + "     , d.ins_deel_aanmaak"
          + "     , d.ins_deel_vervaldatum"
          + "     , d.ins_deel_omschrijving parent_omschrijving"
          + "     , d.ins_deel_t_uitvoertijd.tijdsduur uitvoertijd"
          + "     , d.ins_deel_t_uitvoertijd.eenheid uitvoertijd_eenheid"
          + "     , d.ins_deel_opmerking"
          + "     , idp.ins_disc_params_autonum"
          + "  FROM ins_deel d"
          + "     , ins_srtdeel s"
          + "     , ins_srtgroep g"
          + "     , ins_tab_discipline dis"
          + "     , ins_disc_params idp"
          + " WHERE ins_deel_key = " + parent_key
          + "   AND d.ins_srtdeel_key = s.ins_srtdeel_key"
          + "   AND s.ins_srtgroep_key = g.ins_srtgroep_key"
          + "   AND g.ins_discipline_key = dis.ins_discipline_key"
          + "   AND dis.ins_discipline_key = idp.ins_discipline_key";
    }
    else
    { // Het gaat om een Nieuw hoofdobject, defaults bepalen
      sql = "SELECT '' ins_deel_omschrijving"
          + "     , 'P' ins_alg_ruimte_type"
          + "     , -1 ins_alg_ruimte_key"
          + "     , -1 ins_alg_locatie_key"
          + "     , s.ins_srtdeel_key"
          + "     , s.ins_srtgroep_key"
          + "     , g.ins_discipline_key"
          + "     , NULL ins_srtdeel_acadsymbol"
          + "     , NULL ins_deel_x"
          + "     , NULL ins_deel_y"
          + "     , NULL ins_deel_dwgx" // future: +", null ins_deel_z"
          + "     , 255 ins_srtdeel_binding" // 255 omdat gebruiker nog mag toggelen
          + "     , NULL ins_alg_ruimte_type_org"
          + "     , NULL ins_alg_ruimte_key_org"
          + "     , s.ins_srtdeel_code"
          + "     , SYSDATE ins_deel_aanmaak"
          + "     , NULL ins_deel_vervaldatum"
          + "     , NULL parent_omschrijving"
          + "     , NULL uitvoertijd"
          + "     , 1 uitvoertijd_eenheid"
          + "     , NULL ins_deel_opmerking"
          + "     , idp.ins_disc_params_autonum"
          + "  FROM ins_srtdeel s"
          + "     , ins_srtgroep g"
          + "     , ins_tab_discipline dis"
          + "     , ins_disc_params idp"
          + " WHERE s.ins_srtdeel_key = " + srtdeel_key
          + "   AND s.ins_srtgroep_key = g.ins_srtgroep_key"
          + "   AND g.ins_discipline_key = dis.ins_discipline_key"
          + "   AND dis.ins_discipline_key = idp.ins_discipline_key";
    }

    oRs = Oracle.Execute(sql);
    if (!oRs.eof)
    {
      // Als ik een onderdeel toevoeg (parent_key>0 en ins_key<0) is het niet waarschijnlijk
      // dat disc/groep/soort/omschrijving gelijk zijn  aan die van de parent
      if (ins_key > 0 || copy)
      {
        var disc_key    = oRs('ins_discipline_key').Value;
        var srtdeel_key  = oRs('ins_srtdeel_key').Value;
        var srtgroep_key = oRs('ins_srtgroep_key').Value;
        var srtcode   = oRs('ins_srtdeel_code').Value;
        var desc      = (copy ? "" : oRs('ins_deel_omschrijving').Value); // Als copy dan clientside nieuwe code laten genereren.
        var opmerk    = (copy ? "" : oRs('ins_deel_opmerking').Value);
        var perslid_key_beh   = oRs('prs_perslid_key_beh').Value;
      }
      parentdesc  = oRs('parent_omschrijving').Value;
      uitvoertijd = oRs("uitvoertijd").Value;
      uitvoertijd_eenheid = oRs("uitvoertijd_eenheid").Value || 'D';

      // Bij kopiëren kan het object uitgeleend zijn. Dan org type/key nemen
      bind        = (copy && oRs("ins_alg_ruimte_key_org").Value? oRs("ins_alg_ruimte_type_org").Value : oRs("ins_alg_ruimte_type").Value);
      bind_key    = (copy && oRs("ins_alg_ruimte_key_org").Value? oRs("ins_alg_ruimte_key_org").Value : oRs("ins_alg_ruimte_key").Value);
      aanmaak     = (copy? new Date() : new Date(oRs("ins_deel_aanmaak").Value));
      vervaldatum = (oRs('ins_deel_vervaldatum').Value != null && !copy)? new Date(oRs('ins_deel_vervaldatum').Value) : null;

      if (!parent_key)
        parent_key = oRs('ins_deel_parent_key').Value;
      srtdeel_binding = oRs('ins_srtdeel_binding').Value;
      tekenbaar = oRs('ins_srtdeel_acadsymbol').Value != null;
      getekend = oRs('ins_deel_dwgx').Value != null;
      xcoord = (copy? null : oRs('ins_deel_x').Value); // Als copy dan xcoord leeg laten. Is toch anders als orgineel.
      if (xcoord) xcoord = safe.jsfloat(xcoord);
      ycoord = (copy? null : oRs('ins_deel_y').Value); // Als copy dan ycoord leeg laten. Is toch anders als orgineel.
      if (ycoord) ycoord = safe.jsfloat(ycoord);
      // future: zcoord = oRs('ins_deel_z').Value
      org_bind     = oRs('ins_alg_ruimte_type_org').Value;
      org_bind_key = oRs('ins_alg_ruimte_key_org').Value;
      isLendOut = (oRs('ins_alg_ruimte_key_org').Value != null && !copy); // Bij kopieëren is het object nog niet uitgeleend.
      alg_ruimte_type = oRs('ins_alg_ruimte_type').Value;
      autonum = oRs('ins_disc_params_autonum').Value;
      oRs.close();

      if (org_bind_key != null)
        free = false;
      else
        free = true;


      if ((ins_key > 0 || parent_key > 0 || copy) && isNext < 0)
      {
        if (copy)
          var o_key = ins_copy_key;
        else if (ins_key > 0)
          var o_key = ins_key;
        else
          var o_key = parent_key;
        if ( bind == 'R' || bind == 'W' || bind == 'T' )
        {
          if (copy && !free)
          {
            // Object is uitgeleend. Voor het kopiëren alg_ruimte_key_org en alg_ruimte_type_org gebruiken voor de plaats.
            if (bind == "W")
              sql = "SELECT d.ins_alg_locatie_key"
                  + "     , v.alg_gebouw_key"
                  + "     , r.alg_verdieping_key"
                  + "     , r.alg_ruimte_key"
                  + "     , d.ins_alg_ruimte_key_org prs_werkplek_key"
                  + "  FROM ins_deel d"
                  + "     , prs_werkplek wp"
                  + "     , alg_ruimte r"
                  + "     , alg_verdieping v"
                  + " WHERE ( (d.ins_alg_ruimte_key_org = wp.prs_werkplek_key)"
                  + "    AND d.ins_alg_ruimte_type_org = 'W')"
                  + "   AND ( (wp.prs_alg_ruimte_key = r.alg_ruimte_key)"
                  + "    AND d.ins_alg_ruimte_type_org = 'W')"
                  + "   AND r.alg_verdieping_key = v.alg_verdieping_key"
                  + "   AND d.ins_deel_verwijder IS NULL"
                  + "   AND d.ins_deel_key = " + ins_copy_key;
            else
              sql = "SELECT l.alg_locatie_key"
                  + "     , g.alg_gebouw_key"
                  + "     , v.alg_verdieping_key"
                  + "     , r.alg_ruimte_key"
                  + "     , NULL prs_werkplek_key"
                  + "  FROM ins_deel d"
                  + "     , alg_ruimte r"
                  + "     , alg_verdieping v"
                  + "     , alg_gebouw g"
                  + "     , alg_locatie l"
                  + " WHERE d.ins_alg_ruimte_key_org = r.alg_ruimte_key"
                  + "   AND d.ins_alg_ruimte_type_org = 'R'"
                  + "   AND r.alg_verdieping_key = v.alg_verdieping_key"
                  + "   AND v.alg_gebouw_key = g.alg_gebouw_key"
                  + "   AND g.alg_locatie_key = l.alg_locatie_key"
                  + "   AND d.ins_deel_key = " + ins_copy_key;

          }
          else
            sql = "SELECT alg_locatie_key"
                + ", COALESCE(alg_gebouw_key, alg_terreinsector_key) alg_gebouw_key"
                + ", alg_verdieping_key"
                + ", alg_ruimte_key"
                + ", prs_werkplek_key"
                + " FROM ins_v_xdeel_gegevens_keys WHERE ins_deel_key=" + o_key;

          oRs = Oracle.Execute(sql);
          if (!oRs.eof)
          {
            o_loc    = oRs("alg_locatie_key").Value;
            o_bld    = oRs("alg_gebouw_key").Value;
            o_floor  = oRs("alg_verdieping_key").Value;
            o_room   = oRs("alg_ruimte_key").Value;
            o_workpl = oRs("prs_werkplek_key").Value;
            o_dep    = -1;
            o_perslid= -1;

            // gracefull terugvallen nav. DHLN#18851
            // In theorie kan dit ook een probleem zijn voor andere bindings
            // maar daar kan ik geen logische terugvaloptie bedenken.
            if (!(srtdeel_binding & BIND_WERKPL) && bind == 'W')
            {
              o_workpl = -1;
              bind = "R";
            }
          }
        }
        else // Persoon/afdeling gebonden
        {
          if (bind == 'A')
          {
            o_perslid = -1;
            o_dep   = bind_key;
          }
          if (bind == 'P')
          {
            o_perslid = bind_key;
            sql = "SELECT p.prs_afdeling_key, " // even afdeling er bijzoeken
                + S("prs_dep_string") + " dep"
                + " FROM prs_perslid p, prs_v_afdeling d"
                + " WHERE p.prs_afdeling_key=d.prs_afdeling_key"
                + " AND prs_perslid_key = " + o_perslid;
            oRs = Oracle.Execute(sql);
            o_dep   = oRs("prs_afdeling_key").Value;
          }
          o_loc = o_bld = o_floor = o_room = o_workpl = -1;
        }
      }
    }
  }
  // Als we zo ver zijn gekomen hebben we ondertussen misschien wel srtdeel_key maar niet srtgroep_key
  if (srtdeel_key > 0 && srtgroep_key < 0)
  {
    var sql = "SELECT sd.ins_srtgroep_key, ins_discipline_key"
            + "  FROM ins_srtdeel sd, "
            + "       ins_srtgroep sg"
            + " WHERE sd.ins_srtdeel_key = " + srtdeel_key
            + "   AND sg.ins_srtgroep_key = sd.ins_srtgroep_key";
    var oRs = Oracle.Execute(sql);
    srtgroep_key = oRs("ins_srtgroep_key").Value;
    disc_key = oRs("ins_discipline_key").Value;
    oRs.Close()
  }
  if (srtgroep_key > 0 && disc_key < 0)
  {
    var sql = "SELECT ins_discipline_key"
            + "  FROM ins_srtgroep sg"
            + " WHERE sg.ins_srtgroep_key = " + srtgroep_key;
    var oRs = Oracle.Execute(sql);
    disc_key = oRs("ins_discipline_key").Value;
    oRs.Close()
  }

  if (module == "SLE" && ins_key < 0)
  { // Eigen werkplek als default plaats voor sleutels en cilinders
    o_loc    = user.alg_locatie_key();
    o_bld    = user.alg_gebouw_key();
    o_floor  = user.alg_verdieping_key();
    o_room   = user.alg_ruimte_key();
  }

  sql = "SELECT k.ins_kenmerk_key"
       + " FROM ins_srtkenmerk t"
       + ", ins_kenmerk k"
       + ", ins_srtdeel s"
       + ", ins_srtgroep g"
       + " WHERE s.ins_srtdeel_key = " + srtdeel_key
       + " AND (   (    k.ins_srtinstallatie_key = s.ins_srtdeel_key"
       + " AND k.ins_kenmerk_niveau = 'S')"
       + " OR (    k.ins_srtinstallatie_key = s.ins_srtgroep_key"
       + " AND k.ins_kenmerk_niveau = 'G')"
       + " OR (    k.ins_srtinstallatie_key = g.ins_discipline_key"
       + " AND k.ins_kenmerk_niveau = 'D')"
       + " )"
       + " AND k.ins_srtkenmerk_key = t.ins_srtkenmerk_key"
       + " AND g.ins_srtgroep_key = s.ins_srtgroep_key"
       + " AND k.ins_kenmerk_verwijder IS NULL"
       + " AND t.ins_srtkenmerk_verwijder IS NULL"
       + (urole == "fo"?" AND k.ins_kenmerk_volgnummer > 900" : "");
  oRs = Oracle.Execute(sql);
  var uitleen_flex_present = false;
  if (!oRs.eof) uitleen_flex_present = true;
%>
  <body id="editbody">
<%
    var buttons = [];
    if (urole == "bo")
      buttons.push( {title: L("lcl_submit"), action:"checkInput()", icon: "opslaan.png" })

    buttons.push( {title: L("lcl_cancel"), action:"ins_cancel()", icon: "undo.png" } );

    var headertitle = L("lcl_ins_frame_algemeen");
    if (module == "SLE")
    {
      var sletype = (srtgroep_key == S("sle_ins_srt_groep_key")? "S" : "C");
      if (sletype == "S")
        headertitle = L("lcl_sle_sleutel");
      else
        headertitle = L("lcl_sle_cilinder");
    }

    // Als o_perslid een waarde heeft dan krijgt o_dep ook een waarde. De afdeling van een persoon wordt altijd erbij gezocht.
    // Daarom alleen invalid binding via o_dep als o_perslid geen waarde heeft.
    var invalid_binding = ((!(srtdeel_binding & (BIND_AFDELI)) && o_dep > 0 && o_perslid < 0) ||
                           (!(srtdeel_binding & (BIND_PERSOO)) && o_perslid > 0) ||
                           (!(srtdeel_binding & (BIND_TERREI)) && o_bld > 0 && !(srtdeel_binding & (BIND_RUIMTE)) && !(srtdeel_binding & (BIND_WERKPL))) ||
                           (!(srtdeel_binding & (BIND_RUIMTE)) && o_room > 0 && !(srtdeel_binding & (BIND_WERKPL))) ||
                           (!(srtdeel_binding & (BIND_WERKPL)) && o_workpl > 0))

    IFRAMER_HEADER(headertitle, buttons);
%>
    <div id="edit">
      <script type="text/javascript">
        urole = "<%=urole%>";
        var invalid_binding = <%=invalid_binding? 1 : 0%> == 1;

        // Houd rekening met globaal gezette bindingBits
        function checkInput(isNext)
        {
          if (!validateForm("u2"))
            return false;

          var f = document.u2;
          var msg = '<%=L("lcl_po_missed_dsc")%>';
          var status = f && f.desc && f.desc.value != "";
<%        if (parent_key < 0 && !isLendOut && !invalid_binding)
          { %>
            // Controleer of er wel iets gekozen is. De werking is tegenwoordig zo dat je nooit iets
            // fouts gekozen kunt hebben
            if (status)
            {
              status = false;
              msg = "<%=L("lcl_obj_bind_mandatory")%>\n";
              if (bindingBits & BIND_AFDELI)
                if (f.sDept.value > 0)
                  status = true;
                else
                  msg += '<%=L("lcl_obj_bind_a")%> of ';

              if (bindingBits & BIND_PERSOO)
                if (f.sPerson.value > 0)
                  status = true;
                else
                  msg += '<%=L("lcl_obj_bind_p")%> of ';

<%            if (!isLendOut || (isLendOut && alg_ruimte_type == "R"))
              { %>
                if (bindingBits & BIND_TERREI)
                  if (f.gebouwkey.value > 0 && f.bttype.value == 'T')
                    status = true;
                  else
                    msg += '<%=L("lcl_obj_bind_t")%> of ';

                if (bindingBits & BIND_RUIMTE)
                  if( f.ruimtekey.value > 0 )
                    status = true;
                  else
                    msg += '<%=L("lcl_obj_bind_r")%> of ';

                if ((bindingBits & BIND_WERKPL) && f.werkplekkey)
                  if (f.werkplekkey.value > 0)
                    status = true;
                  else
                    msg += '<%=L("lcl_obj_bind_w")%> of ';
<%            } %>
              msg = msg.substring(0, msg.length - 3);
            }
<%        } %>

          if (status)
          {
            f.next.value = isNext ? '1' : '0';
            f.submit();
            return true;
          }
          alert(msg);
          return false;
        }
      </script>

      <form name="u2"
            action="ins_edit_deel_save.asp?urole=<%=urole%>&ins_key=<%=ins_key%>&parent_key=<%=parent_key%>"
            method="post"
            target="hidFrameSubmit"
            onsubmit="checkInput();">
        <input type=hidden name=urole value="<%=urole%>">
<%      if (ins_key > 0 && isNext < 0)
        { %>
          <input type='hidden' name='obj' value='<%=ins_key%>'><%
        }
        if (urole == "fo")
        {
          if (free)
          { %>
            <input type="hidden" name="free" value="1">
<%        }
        }
        else
        { %>
          <input type="hidden" name="next" value="0">
<%      } %>

        <script type="text/javascript">
          var parent_key = <%=parent_key%>;
          var bindingBits = <%=srtdeel_binding%>;
        </script>

<%      BLOCK_START("insIns", L("lcl_general_properties")); %>
        <tr>
          <td>
            <table>
<%            FCLTdisciplineselector("disc",
                                     "sgDisc",
                                     { label: L("lcl_discipline"),
                                       disc_key: disc_key,
                                       module: module,
                                       perslidKey: user_key,
                                       autfunctionKey: authparams.autfunctionkey,
                                       autRW: "W",
                                       extraParamField: "autonum",
                                       extracode: "A",
                                       onChange: "onChangeDiscipline", // disgroepChanged
                                       readonly: (disc_key > 0 || ins_key > 0 || copy) || !this_ins.canChangeAlg,
                                       required: true
                                     });

              FCLTsrtgroepselector("srtgroep",
                                   "sgSrtgroep",
                                   { label: L("lcl_obj_group"),
                                     srtgroep_key: srtgroep_key,
                                     autfunction: autfunction,
                                     onChange: "onChangeSrtgroep",
                                     urlAdd: [{urlParam: "disc_key", field: "disc"}],
                                     readonly: (ins_key > 0 || copy || module == "SLE") || !this_ins.canChangeAlg,
                                     required: true
                                   });

              // Object Sort =======================================================
              FCLTsrtdeelselector("srtdeel",
                                  "sgSrtdeel",
                                  { label: L("lcl_obj_sort"),
                                    srtdeel_key: srtdeel_key,
                                    autfunction: autfunction,
                                    onChange: "onChangeSrtdeel",
                                    urlAdd: [{urlParam: "srtgroep_key", field: "srtgroep"},
                                             {urlParam: "disc_key", field: "disc"}],
                                    extraParamField: "binding",
                                    extracode: "B",
                                    readonly: (ins_key > 0 || copy) ||  !this_ins.canChangeAlg,
                                    required: true
                                  });

              if ((ins_key < 0 && !copy) || copy)
              {
                if (copy)
                { %>
                 <input type="hidden" id="disc" name="disc" value="<%=disc_key%>">
                 <input type="hidden" id="srtgroep" name="srtgroep" value="<%=srtgroep_key%>">
                 <input type="hidden" id="srtdeel" name="srtdeel" value="<%=srtdeel_key%>">
<%              } %>
                <script>
                  $(document).ready(function()
                                    {
                                      onChangeSrtdeel(<%=srtdeel_key%>);
                                      checkReadonlyDesc();
                                    });
                </script>
<%            }

              var new_desc = (srtgroep_key == S("sle_ins_srt_groep_key") || srtgroep_key == S("cil_ins_srt_groep_key")? srtcode : "");
              RWFIELDTR("desc",
                        "fld",
                        L("lcl_obj_identification"),
                        (ins_key > 0 || copy) && isNext < 0? desc : new_desc,
                        { maxlength: 60,
                          required: true,
                          readonly: !this_ins.canChangeAlg || !(autonum & 2)
                        });
              if(ins_key < 0 || isNext > 0 )
              {
                RWFIELDTR("count",  "fldshort", L("lcl_count"), 1, {datatype: "number", readonly: !this_ins.canChangeAlg});
              }
              RWFIELDTR("opmerk", "fld", L("lcl_ins_opmerking"), opmerk, {maxlength: 320, readonly: !this_ins.canChangeAlg}); %>
            </table>
          </td>
          <td align="center">
<%          var srtdeel_image;
            if (srtdeel_key > 0)
            {
              sql = "SELECT ins_srtdeel_image"
                  + "  FROM ins_srtdeel"
                  + " WHERE ins_srtdeel_key = " + srtdeel_key;
              oRs = Oracle.Execute(sql);
              srtdeel_image = oRs("ins_srtdeel_image").Value;
            }
            if (srtdeel_image)
            {
              var imageFile = S("ins_image_path") + srtdeel_image;
              var fso = new ActiveXObject("Scripting.FileSystemObject");
              if (fso.FileExists(Server.MapPath(imageFile)))
              { %>
            <div id="divinsphoto">
                <img id="insphoto" src="<%=safe.htmlattr(imageFile)%>">
<%            }
            }
            else
            { %>
            <div id="divinsphoto" style='display:none'>
              <img id="insphoto" src="">
<%          } %>
            </div>
          </td>
        </tr>
<%      BLOCK_END();

        if (urole != "fo" && parent_key < 0)
        {
          BLOCK_START("insGeo", L("lcl_ins_meta_data"));
          FCLTcalendar("aanmaakdatum",
                       { datum: aanmaak,
                         label: L("lcl_last_action"),
                         required: true,
                         readonly: !this_ins.canChangeAlg,
                         volgnr: 1
                       });
          FCLTcalendar("vervaldatum",
                       { datum: vervaldatum,
                         initEmpty: vervaldatum==null,
                         label: L("lcl_ins_vervaldatum"),
                         readonly: !this_ins.canChangeAlg,
                         volgnr: 2
                       });
        FCLTpersoonselector("ins_manager", // beheerder
                            "sgins_manager",
                           { perslidKey: perslid_key_beh,
                             autlevel: authparams && authparams.PRSwritelevel,
                             label: L("lcl_ins_manager"),
                             filtercode: "INSB", // TODO: een filter toevoegen?
                             required: false,
                             readonly: false,
                             moreinfo: false  /* PF: omdat de showmode die heeft, en het label erg lang is*/
                          });
          if (!(bind == 'A' || bind == 'P'))
          {
            RWFIELDTR("xcoord",  "fldshort", L("lcl_obj_geoxcoord"),           xcoord, {maxlength: 12, datatype: "float"});
            RWFIELDTR("ycoord",  "fldshort", L("lcl_obj_geoycoord"),           ycoord, {maxlength: 12, datatype: "float"});
          }
          if (tekenbaar)
          {
            // als het object technisch getekend zou kunnen zijn, geven we hier de status aan.
            // Een vriendelijke optie zou zijn om in geval van niet-geplaatst-zijn hier de optie toe te voegen
            // omdat direct alsnog te doen; wellicht zelfs ook voor VERplaatsen.
%>          <tr><td></td><td><%=getekend?L("lcl_obj_isgetekend"):L("lcl_obj_nietgetekend")%></td></tr>
<%         }
           BLOCK_END();
        }

        if (urole != "fo")
        {
          BLOCK_START("insIns", L("lcl_owner_info"));
          // Voor onderdelen ook het hoofdobject weergeven
          ROFIELDTR("fldd", L("lcl_ins_parentobject"), parentdesc, {suppressEmpty: true});
          if ((srtdeel_binding & (BIND_AFDELI)) && (!isLendOut || (isLendOut && o_dep > 0)) && !invalid_binding)
          {
            FCLTafdelingselector("sDept",
                                   "sDept",
                                  { departmentKey: o_dep,
                                    label: L("lcl_prs_organisatie"),
                                    autlevel: authparams.PRSwritelevel,
                                    onChange: "onChangeDept",
                                    readonly: (parent_key > 0 || isLendOut) || !this_ins.canChangeAlg
                                  });
          }

          if ((srtdeel_binding & (BIND_PERSOO)) && (!isLendOut || (isLendOut && o_perslid > 0)) && !invalid_binding)
          {
            FCLTpersoonselector("sPerson", // requestor
                                 "sgPerson",
                                 { perslidKey: o_perslid,
                                   label: L("lcl_name"),
                                   autlevel: authparams.PRSwritelevel,
                                   onChange: "onChangePerson",
                                   readonly: (parent_key > 0 || isLendOut) || !this_ins.canChangeAlg
                                 });
          }

          if ((!isLendOut || (isLendOut && (bind == "R" || bind == "T"))) && !invalid_binding)
          {
            var maxlevel = -1;
            var change = "";
%>
            <script>
              function change1()
              {
                setBind('T');
              }

              function change2(p_key)
              {
                setBind('R');
              }

              function change3(p_key)
              {
                setBind('W');
              }
            </script>
<%
            if (srtdeel_binding & (BIND_TERREI | BIND_RUIMTE | BIND_WERKPL))
            {
              change = "change1()";
              maxlevel = 3;
            }

            if (srtdeel_binding & (BIND_RUIMTE | BIND_WERKPL))
            {
              change = "change2()";
              maxlevel = 5;
            }

            if (srtdeel_binding & (BIND_WERKPL))
            {
              change = "change3()";
              maxlevel = 6;
            }

            if (maxlevel >= 2)
              FCLTplaatsselector(authparams.ALGwritelevel, { locatiekey: o_loc,
                                                             verdiepingkey: o_floor,
                                                             gebouwkey: o_bld,
                                                             ruimtekey: o_room,
                                                             werkplekkey: o_workpl,
                                                             startlevel: 2, // locatie
                                                             eindlevel: maxlevel,
                                                             terrein: true,
                                                             filtercode: "INCVR",
                                                             onLocChange: change,
                                                             escalateOnChUp: true, // ook onLocChange als je gebouw wijzigt
                                                             readonly: (parent_key > 0 || isLendOut) || !this_ins.canChangeAlg
                                                           });
          }
          BLOCK_END();
        }

        BLOCK_START("insRunTime", L("lcl_ins_additional_details"));
        sql = "SELECT  'U', " + safe.quoted_sql(L("lcl_mld_hours")) + " FROM DUAL"
            + " UNION SELECT  'D', " + safe.quoted_sql(L("lcl_mld_days")) + " FROM DUAL"
            + " ORDER BY 2";
        var selectparams = { fieldName: "dayshours",
                             sql: sql,
                             params: { id: "dayshours",
                                       initKey: uitvoertijd_eenheid,
                                       readonly: !this_ins.canChangeAlg && uitvoertijd < 0,
                                       disable: !uitvoertijd
                                     }
                           }
        RWFIELDTR("uitvoertijd", "fldins_uitvtijd", L("lcl_ins_uitvoertijd"), uitvoertijd? Math.round(uitvoertijd * 100) / 100 : "", {maxlength: 4, datatype: "float", html: "onChange='onChangeUitvoertijd();'", selector: selectparams, readonly: !this_ins.canChangeAlg});
        BLOCK_END();

        if (urole != "fo" || uitleen_flex_present) // FO ziet ze alleen als er uitleen flex zijn?
        {
    %><div id='insFlexList'><% // Wrapper div voor dynamisch herladen

           generateFlexKenmerkBlock({ urole: urole,
                                     ins_key: copy? ins_copy_key : ins_key,
                                     srtdeelkey_array: srtdeel_key > 0? [srtdeel_key] : [],
                                     reado: false,
                                     flexcolumns: S("ins_flexcolumns"),
                                     bewerkniveau: "D"
                                   });
    %></div><%
     }
IFACE.FORM_END();
%>
      </form>
      <iframe src="../Shared/empty.html" name="hidFrameSubmit" style="display:none"></iframe>
    </div>
  </body>
</html>