var screenTaskSelect = {
  page : 0,
  pointer: 0,
  n: 0,
  loaded: 0,
  right : func {
    me.loaded = 0;
    blocked = 1;
    var t = browse(size(routes), me.pointer, me.page, arg[0]);
    me.pointer = t[0];
    me.page = t[1];
  },
  load : func {
    setprop("/autopilot/route-manager/active", 0);
    gps_data.getNode("route",1).removeChildren("Waypoint");
    getprop("/autopilot/route-manager/route/num") == 0 or apply_command("route-delete");
    fgcommand("loadxml", props.Node.new({
              "filename": getprop("/sim/fg-home") ~ "/Routes/" ~ routes[(me.page * 5) + me.pointer],
              "targetnode": "/instrumentation/gps/route"
    }));
    var n = 0;
    scratch.getNode("index").setIntValue(-1);
    apply_command("route-insert-after");
    foreach (var c; gps_data.getNode("route").getChildren("Waypoint")) {
      n += 1;
    }
    for (var i = 0; i < n; i += 1) {
      scratch.getNode("index").setIntValue(-1);
      Waypoint_to_scratch(gps_data.getNode("route/Waypoint[" ~ i ~ "]"));
      apply_command("route-insert-after");
    }
    apply_command("leg");
    setprop("/autopilot/route-manager/active", 1);
    me.loaded = 1;
  },
  enter : func {
  },
  escape : func {
  },
  start : func {
    me.n > 0 or return;
    me.load();
    blocked = 0;
    left_knob(1);
  },
  lines : func {
    if (me.loaded != 1) {
      blocked = 1;
    }
    if (me.n == 0) {
      display([
        "",
        "",
        "NO ROUTE FOUND",
        "",
        ""
      ]);
    } else for (var l = 0; l < LINES; l += 1) {
      if ((me.page * LINES + l) < me.n) {
        name = routes[me.page * LINES + l];
        if (substr(name, -4) == ".xml") {
          name = substr(name, 0, size(name) - 4);
        }
        name = string.uc(name);
        line[l].setValue(sprintf("%s %s",me.pointer == l ? ">" : " ", name));
      } else {
        line[l].setValue("");
      }
    }
  }
};

var screenWaypointsList = {
  n: 0,
  page: 0,
  pointer: 0,
  right : func {
  var t = browse(me.n, me.pointer, me.page, arg[0]);
  me.pointer = t[0];
  me.page = t[1];
  },
  enter : func {
  },
  escape : func {
  },
  start : func {
  },
  lines : func {
    for (var l = 0; l < LINES; l += 1) {
      if ((me.page * LINES + l) < me.n) {
        name = gps_data.getNode("route/Waypoint["~((me.page * LINES) + l)~"]/ID").getValue();
        line[l].setValue(sprintf("%s %s",me.pointer == l ? ">" : " ", name));
      } else {
        line[l].setValue("");
      }
    }
  }
};

var screenWaypointInfos = {
  right : func {
  },
  enter : func {
  },
  escape : func {
  },
  start : func {
  },
  lines : func {
    display(NOT_YET_IMPLEMENTED);
  }
};
