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

     File:    pda/setlocation.asp
              Sets or lets the user select a current and global location
     Status: 90%
     Context:
              vanaf smartphone-portal of direct via een QRC of andere plaatsbepalende service
     Parameters:
                alg_key of loc_key of bld_key of flr_key
*/
%>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="./mobile.inc" -->
<!-- #include file="./iface.inc" -->
<%

// Als ik een alg_key krijg, is dat altijd van level S("mobile_alg_level")
var alg_key = getFParamInt("alg_key", -1);

// Deze zouden door andere systemen of mechanismes gebruikt kunnen worden FOR FUTURE USE
var loc_key = getFParamInt("loc_key", -1);
var bld_key = getFParamInt("bld_key", -1);
var flr_key = getFParamInt("flr_key", -1);
var qrc = getQParamInt("qrc", 0) != 0;
var latitude = getQParamFloat("latitude", -91);
var longitude = getQParamFloat("longitude", -181);
// Met meegegeven waarden ben ik aan het submitten: zet de gedetailleerdste waarde
if (flr_key > -1 || bld_key > -1 || loc_key > -1 || alg_key > -1) {
    protectRequest.validateToken();
}
if (flr_key > -1) {
    mobile.iamhere("V", flr_key);
} else if (bld_key > -1) {
    mobile.iamhere("G", bld_key);
} else if (loc_key > -1) {
    mobile.iamhere("L", loc_key);
} else if (alg_key > -1) {
    mobile.iamhere(S("mobile_alg_level"), alg_key);
}
if (flr_key > -1 || bld_key > -1 || loc_key > -1 || alg_key > -1) {
    // Gezet, terug naar portal, wellicht nog parameter om niks te doen (QRC)
    // Dit lijkt niet helemaal lekker te gaan zo (na langer rondklikken)
    Response.Redirect(rooturl + "/appl/pda/Facilitor.asp");
}

// Kies heel ruim waar je autorisatie op hebt
// Let op dat je hier alleen autorisaties met plaats-component toevoegt (fac_functie_minlevel & 8)
var sql = "SELECT COALESCE(MIN(fac_gebruiker_alg_level_read), 9) readlevel"
        + "  FROM fac_v_webgebruiker g, fac_functie f "
        + " WHERE g.fac_functie_key = f.fac_functie_key "
        + "   AND f.fac_functie_code IN ('WEB_MLDUSE', 'WEB_INSMAN', 'WEB_INSUSE', 'WEB_ALGMAN', 'WEB_ALGUSE', 'WEB_MLDBO2', 'WEB_ORDBO2', 'WEB_MLDBOF', 'WEB_BEZUSE', 'WEB_RESUSE', 'WEB_MLDUSE')"
        + "   AND g.prs_perslid_key = " + user_key;
var oRs = Oracle.Execute(sql);
var autlevel = oRs("readlevel").Value; // Pas op: kan ook '0' zijn (regio)
oRs.Close();

// Als keys meegegeven, dan globallocation zetten op die key en refresh naar Facilitor.asp (die toont de locatie)
// Als geen keys meegegeven, dan plaatsselector met default de huidige globallocation om aan te laten passen
%>
<html>
    <head>
<%  FCLTMHeader.Generate({ title: L("lcl_mobile_setlocation") });
    var init_alg_key = -1;
    if (S("mobile_alg_level") == 'L')
    {
        sql = "SELECT l.alg_locatie_key key"
            + "     , " + S("alg_loc_string") + " descr"
            + "  FROM alg_locatie l"
            + " WHERE l.alg_locatie_verwijder IS NULL"  // in scope
            + "   AND (   l.alg_locatie_vervaldatum IS NULL"
            + "        OR l.alg_locatie_vervaldatum > TRUNC (SYSDATE))"
            + "   AND EXISTS (SELECT ''"
            + "                 FROM alg_srtgebouw sg, alg_v_aanweziggebouw gg"
            + "                WHERE sg.alg_srtgebouw_passief IS NULL"
            + "                  AND (   gg.alg_gebouw_vervaldatum IS NULL"
            + "                       OR gg.alg_gebouw_vervaldatum > TRUNC (SYSDATE))"
            + "                  AND sg.alg_srtgebouw_key(+) = gg.alg_srtgebouw_key"
            + "                  AND gg.alg_locatie_key = DECODE (l.alg_locatie_key, NULL, gg.alg_locatie_key, l.alg_locatie_key)"
            + "               UNION ALL"
            + "               SELECT ''"
            + "               FROM alg_v_aanwezigterreinsector t"
            + "               WHERE t.alg_locatie_key = DECODE (l.alg_locatie_key, NULL, t.alg_locatie_key, l.alg_locatie_key))";
        if (autlevel >= 0)
            sql +=   " AND alg_locatie_key IN"
                   + " (SELECT alg_locatie_key FROM fac_v_my_locations"
                   + "  WHERE prs_perslid_key = " + user_key
                   + "  AND niveau = " + autlevel + ")";
        sql += " ORDER BY 2";
        init_alg_key = user.alg_locatie_key({ withcurrent: true });
    }
    else if (S("mobile_alg_level") == 'G')
    {
        sql = "SELECT g.alg_gebouw_key key"
            + "     , " + S("alg_geb_string") + " descr"
            + "  FROM alg_gebouw g, alg_srtgebouw sg, alg_locatie l"
            + " WHERE sg.alg_srtgebouw_key(+) = g.alg_srtgebouw_key"
            + " AND g.alg_locatie_key = l.alg_locatie_key"
            + " AND l.alg_locatie_verwijder IS NULL"
            + " AND (   l.alg_locatie_vervaldatum IS NULL"
            + "      OR l.alg_locatie_vervaldatum > TRUNC (SYSDATE))"
            + " AND sg.alg_srtgebouw_passief IS NULL"  // Alleen de facilitair actieve gebouwen
            + " AND g.alg_gebouw_verwijder IS NULL";
        if (autlevel >= 0)
            sql +=  " AND g.alg_gebouw_key IN"
                   + " (SELECT alg_gebouw_key FROM fac_v_my_buildings"
                   + "  WHERE prs_perslid_key = " + user_key
                   + "  AND niveau = " + autlevel + ")";
        sql += " ORDER BY 2";
        init_alg_key = user.alg_gebouw_key({ withcurrent: true });
    }
    else if (S("mobile_alg_level") == 'V')
    {
        sql = "SELECT v.alg_verdieping_key key"
            + "     , " + S("alg_ver_string") + " descr"
            + "  FROM alg_gebouw g, alg_srtgebouw sg, alg_verdieping v, alg_locatie l"
            + " WHERE g.alg_gebouw_key = v.alg_gebouw_key"
            + " AND g.alg_locatie_key = l.alg_locatie_key"
            + " AND l.alg_locatie_verwijder IS NULL"
            + " AND (   l.alg_locatie_vervaldatum IS NULL"
            + "      OR l.alg_locatie_vervaldatum > TRUNC (SYSDATE))"
            + " AND sg.alg_srtgebouw_key(+) = g.alg_srtgebouw_key"
            + " AND sg.alg_srtgebouw_passief IS NULL"  // Alleen de facilitair actieve gebouwen
            + " AND g.alg_gebouw_verwijder IS NULL"
            + " AND v.alg_verdieping_verwijder IS NULL";
        if (autlevel >= 0)
            sql +=   " AND g.alg_gebouw_key IN"
                   + " (SELECT alg_gebouw_key FROM fac_v_my_buildings"
                   + "  WHERE prs_perslid_key = " + user_key
                   + "  AND niveau = " + autlevel + ")";
        sql += " ORDER BY 2";
        init_alg_key = user.alg_verdieping_key({ withcurrent: true });
    }
%>

<script>
function showError(error)
{
  var txt;
  switch(error.code)
  {
    case error.PERMISSION_DENIED:
      txt = "User denied the request for Geolocation."
      break;
    case error.POSITION_UNAVAILABLE:
      txt = "Location information is unavailable."
      break;
    case error.TIMEOUT:
      txt = "The request to get user location timed out."
      break;
    case error.UNKNOWN_ERROR:
      txt = "An unknown error occurred."
      break;
  }
  FcltMgr.alert(txt);
}

function loc_submit() {
    var $selected = $("#alg_key").find(".selected");
    if (!$selected.length)
    {
        jqToast(L("lcl_select_location"));
        return false;
    }
    var selected_key = parseInt($selected.attr("id").substr(4), 10);
    var data = $("form[name=setloc]").serialize()+"&alg_key="+selected_key;
    $.post($("form[name=setloc]")[0].action, data, function() { location.href = "<%=rooturl + "/appl/pda/Facilitor.asp"%>"; });
}

function doPlaceSelect(alg_key)
{
    var select_this_key = alg_key || <%=init_alg_key%>;
    $("#alg_key").find(".selected").removeClass("selected");
    var $selected = $("#alg-" + select_this_key);
    $selected.addClass("selected");
    if (!alg_key && $selected.length)
    {
        var scrollTop = $selected.offset().top                      // Plaats-offset met top vd pagina
                      - (document.documentElement.clientHeight / 2) // Helft v/d pagina hoogte (zodat de plaats in het midden komt)
                      + ($selected[0].clientHeight / 2);            // Helft v/d plaats-hoogte (zodat plaats exact in het midden komt)
        $(document.scrollingElement).animate({ scrollTop: scrollTop }, 250);
    }
}

function selectByGPS()
{
    navigator.geolocation.getCurrentPosition(function (pos)
    {
        var lat = pos.coords.latitude;
        var lng = pos.coords.longitude;
        if (lat == null)
            FcltMgr.alert("Cannot access coordinates");
        $.getJSON("getLocation.asp", { lat: lat, lng: lng },
        function (data)
        {
            doPlaceSelect(data.alg_key);
        });

    },
    showError,
    { timeout: 15000, enableHighAccuracy: true });
    return false;
}

$(function()
{
    var latitude = <%=safe.jsfloat(latitude)%>;
    var longitude = <%=safe.jsfloat(longitude)%>;
    if (latitude > -91) {
        $.getJSON("getLocation.asp", { lat: latitude, lng: longitude },
        function (data)
        {
            doPlaceSelect(data.alg_key);
        });
    }
    else
        doPlaceSelect();
});
</script>
</head>
<body>
<%
    PAGE_START({ id: "page_setlocation" });
    HEADER ({back: !qrc});
    CONTENT_START();
%>
    <form id="setloc" name="setloc" action="<%=rooturl + "/appl/pda/"%>setlocation.asp" method="post">
    <div class="ui-bar" id="setloctxt"><%= L("lcl_mobile_setlocation_intro")%></div>
<%
    CONTROLGROUP_START();
    var gps_btn_params = { icon: "fa-location-arrow", id: "gps-btn" };
    if (Session("app_build"))
        gps_btn_params.linkid = "loc:/appl/pda/setlocation.asp";
    else
        gps_btn_params.click = "selectByGPS();";
    BUTTON(L("lcl_mobile_currentgps"), gps_btn_params);
    CONTROLGROUP_END();
    CONTROLGROUP_START();
%>  <input type="text" id="filter" class="<%=MOBILE_UI_CLASSES.input%>" placeholder="<%=L("lcl_autofilter")%>">
<%  CONTROLGROUP_END();
    CONTROLGROUP_START();
    var oRs = Oracle.Execute(sql);
    if (!oRs.EoF)
    {
%>      <fieldset id="alg_key"><%
        while (!oRs.EoF)
        {
            BUTTON(safe.html(oRs("descr").Value), {
                "id"        : "alg-" + oRs("key").Value,
                "click"     : "doPlaceSelect(" + oRs("key").Value + ")",
                "primary"   : false
            });
            oRs.MoveNext();
        }
%>      </fieldset ><%
    }
    oRs.Close();
    CONTROLGROUP_END();
    CONTROLGROUP_START();
    BUTTON(L("lcl_select"), { click: "loc_submit()", icon: "fa-fclt-save" });
    CONTROLGROUP_END();
    IFACE.FORM_END();
%>
  </form>
<%
    CONTENT_END();
    FOOTER();
    PAGE_END();
PDA_PAGE_END(); %>
	</body>
</html>
<% ASPPAGE_END(); %>
