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

    File:           shorturl.asp
    Description:    Redirect naar een bookmark url
    Parameters:     u      Bookmark die in de bookmark tabel moet zitten.
                           Dit moet de eerste parameter zijn als er nog meer komen
                    k      Een integer keywaarde die plat achter de bookmark_query wordt geplakt
                    --     Optionele parameter(s): die worden allemaal blind
                           doorgegeven naar het volgende scherm
    Context:        Vanuit root
    Note:           Welbeschouwd is dit gewoon een url-shortener
                    http://sgf12/Facilitor5iWork/?u=J448UIrR43
                    Het is verleidelijk de u= parameter ook door te geven maar
                    dat is in tegenspraak met het betekenisloos zijn van de u-param
                    Als je dat wilt moet je maar BOOKMARK's gebruiken
*/
    ANONYMOUS_Allowed = 1;
%>
<!-- #include file="../Shared/common.inc"-->
<!-- #include file="../shared/useragent.inc" -->

<%
    var u = getQParam("u");
    var known_bookmarks =
    {
        'afspraak':     { gui: 'appl/bez/bez_afspraak.asp?afspr_key=',          mob: 'appl/pda/afspraak.asp?afs_key=' },
        'bestelling':   { gui: 'appl/bes/bes_bestelling.asp?bes_key=',          mob: 'appl/pda/bestelling.asp?bes_key=' },
        'bestelopdr':   { gui: 'appl/bes/bes_opdr.asp?ordernr='                 },
        'contract':     { gui: 'appl/cnt/cnt_contract.asp?cnt_key=',            mob: 'appl/pda/contract.asp?cnt_key=' },
        'deel':         { gui: 'appl/ins/ins_deel.asp?ins_key=',                mob: 'appl/pda/ins_deel.asp?ins_key=' },
        'factuur':      { gui: 'appl/fin/fin_factuur.asp?fin_key=',             mob: 'appl/pda/factuur.asp?fin_key=' },
        'gebouw':       { gui: 'appl/alg/alg_gebouw.asp?key='                   },
        'locatie':      { gui: 'appl/alg/alg_locatie.asp?key='                  },
        'melding':      { gui: 'appl/mld/mld_melding.asp?mld_key=',             mob: 'appl/pda/melding.asp?mld_key=' },
        'message':      { gui: 'appl/msg/msg_message.asp?message_key='          },
        'opdracht':     { gui: 'appl/mld/mld_opdr.asp?opdr_key=',               mob: 'appl/pda/order.asp?opdr_key=' },
        'perslid':      { gui: 'appl/prs/prs_perslid.asp?prs_key=',             mob: 'appl/pda/user_info.asp?prs_key=' },
        'reservering':  { gui: 'appl/res/res_reservering.asp?rsv_ruimte_key=',  mob: 'appl/pda/reservering.asp?rsv_ruimte_key=' },
        'ruimte':       { gui: 'appl/alg/alg_ruimte.asp?key=',                  mob: 'appl/pda/ruimte.asp?ruimte_key=' },
        'verdieping':   { gui: 'appl/alg/alg_verdieping.asp?key='},
        'xreservering': { gui: 'appl/res/res_reservering.asp?rsv_ruimte_key='}
    }

    var keyparam = getQParamInt("k", -1);
    // For flexiblity reasons: Literal or runtime parameter(s), just pass through...
    var rest = String(Request.ServerVariables("QUERY_STRING")); // Request.ServerVariables("QUERY_STRING") is url-encoded,
                                                                // dat is hier safer dan Request.QueryString
    // Strip eventuele leading &fac_id=XXXX er ook af.
    rest = rest.substring(rest.indexOf("u=")).substring(("u="+u).length+1);

    if (u in known_bookmarks)
    {
        checkUserAgent(); // devicebits waren anders mogelijk nog niet gezet
        if (device.test(device.isDesktop) || device.test(device.isTouch))
            url = known_bookmarks[u].gui;
        else
            url = known_bookmarks[u].mob || known_bookmarks[u].gui;
        url = rooturl + "/" + url + keyparam;

        if (keyparam > -1)
        {
            rest = rest.substring(("k="+keyparam).length+1);
        }
        if (rest)
            url += "&" + rest;
    }
    else
    {
        var sql = "SELECT fac_bookmark_path,"
                + "       fac_bookmark_query,"
                + "       prs_perslid_key_auth,"
                + "       fac_bookmark_unauth_url,"
                + "       fac_bookmark_expire,"
                + "       fac_bookmark_refreshtime"
                + "  FROM fac_bookmark"
                + " WHERE fac_bookmark_id = " + safe.quoted_sql(u);
        var oRs = Oracle.Execute(sql);
        if (oRs.Eof)
        {
            shared.simpel_page(L("lcl_fac_bookmark_unknown"));
        }
        if (oRs("fac_bookmark_expire").Value != null)
        {
            var expire = new Date(oRs("fac_bookmark_expire").Value);
            if (expire <= new Date)
            {
                shared.simpel_page(L("lcl_fac_bookmark_expired"));
            }
        }

        var url = oRs("fac_bookmark_path").Value;
        var refresher = oRs("fac_bookmark_refreshtime").Value;

        if (user_key < 0)
        {
            if (oRs("prs_perslid_key_auth").Value)
            {
                var falluser_key = oRs("prs_perslid_key_auth").Value;
                if (new Perslid(falluser_key).checkAutorisation("WEB_PRSSYS", true))
                {
                    INTERNAL_ERROR_FALLBACK_CANNOT_HAVE_PRSSYS;
                }
                Session("fallback_user_key") = falluser_key; // wordt opgepikt door loginTry.asp
            }
            else
                Session("unauth_url") = oRs("fac_bookmark_unauth_url").Value; // wordt opgepikt door common.asp
        }

        var params = oRs("fac_bookmark_query").Value;
        if (params)
        {
            if (keyparam > -1)
            {
                rest = rest.substring(("k="+keyparam).length+1);
                params += keyparam;
            }
            if (rest)
                params += "&" + rest;
        }
        else
        {
            if (rest)
                params = rest;
        }
        oRs.Close();

        if (params)
            url = url + "?" + params;
    }

    // Als de bookmark een refreshrate heeft ingesteld wordt automatisch gerefreshed
    // We doen een refresh van de complete bookmark, niet alleen van de pagina waar de
    // bookmark naar wijst. Daarmee wordt de fallback_user voor elke refresh opnieuw
    // gebruikt en 'overleeft' de refresh een 'session expired'
    // Voorkom recursie met norefresh
    if (refresher > 0 && getQParamInt("norefresh",0) == 0)
    {
        theURL = "appl/shared/refresher.asp?url=" + Server.URLencode("/?norefresh=1" + transitQS()) + "&refreshrate=" + refresher;
    }
    else
        var theURL = protectQS.create(url);

    var no302 = getQParamInt("no302", 0) == 1;
    if (no302)
    {
        %>  <html>
              <head>
                <title>FACILITOR</title>
                <META http-equiv="refresh" content="0;URL=<%=safe.htmlattr(theURL)%>">
              </head>
              <body bgcolor="#ffffff">
                <a href="<%=safe.htmlattr(theURL)%>">Auto redirect</a>
              </body>
            </html>
        <%
    }
    else
        Response.Redirect(theURL);
%>

