function _start_challengeOLD($stationTag = null)
{
    if ($stationTag === null) {
        rest_sendBadRequestResponse(400, "missing station Tag");
        // doesn't return
    }
    $station = Station::getFromTag($stationTag);
    if ($station === false) {
        rest_sendBadRequestResponse(404, "can find station stationTag=" . $stationTag);
        // doesn't return
    }
    $stationType = new StationType($station->get('typeId'), -1);
    if ($stationType === false) {
        trace("can't find station type stationTag = " . $stationTag, __FILE__, __LINE__, __METHOD__);
        rest_sendBadRequestResponse(500, "can't find station type stationTag=" . $stationTag);
    }
    if ($stationType->get('hasrPI')) {
        $rpi = RPI::getFromStationId($station->get('OID'));
        if ($rpi === false) {
            trace("_start_challenge can't find RPI stationTag=" . $stationTag, __FILE__, __LINE__, __METHOD__);
            rest_sendBadRequestResponse(500, "can't find RPI stationTag=" . $stationTag);
        }
    } else {
        $rpi = null;
    }
    $json = json_getObjectFromRequest("POST");
    json_checkMembers("team_id,message", $json);
    $teamPIN = $json['team_id'];
    $team = Team::getFromPin($teamPIN);
    if ($team === false) {
        trace("_start_challenge can't find team teamPin=" . $teamPIN, __FILE__, __LINE__, __METHOD__);
        rest_sendBadRequestResponse(404, "team not found PIN=" . $teamPIN);
        // doesn't return
    }
    $stationId = $station->get('OID');
    $parms = null;
    // compute challenge parameters into a php hash which will be sent to rPI and used to populate message sent to team
    $state = null;
    switch ($stationType->get('typeCode')) {
        case StationType::STATION_TYPE_CTS:
            $parms = CTSData::_startChallenge($stationId);
            break;
        case StationType::STATION_TYPE_HMB:
            $parms = HMBData::_startChallenge($stationId);
            break;
        case StationType::STATION_TYPE_CPA:
            $parms = CPAData::_startChallenge($stationId);
            break;
        case StationType::STATION_TYPE_FSL:
            $state = FSLData::_startChallenge($stationId);
            $parms = $state['msg_values'];
            break;
        case StationType::STATION_TYPE_EXT:
            $state = EXTData::_startChallenge($stationId);
            $parms = $state;
            break;
    }
    if ($rpi != null) {
        trace("sending to rPI");
        $rpi->start_challenge($stationType->get('delay'), $parms);
    }
    trace("station and team start calls");
    //TODO transaction
    $station->startChallenge($team);
    $team->startChallenge($parms, $stationType->get('typeCode'), $state);
    // $state
    if (Event::createEvent(Event::TYPE_START, $team, $station, 0, $state) === false) {
        trace("create event failed", __FILE__, __LINE__, __METHOD__);
        rest_sendBadRequestResponse(500, "database create failed");
    }
    $msg = $team->expandMessage($stationType->get('instructions'), $parms);
    if ($GLOBALS['SYSCONFIG_ENCODE'] == 1) {
        // if not in student mode encode, if in student mode we only encrypt the even team numbers responses
        if ($GLOBALS['SYSCONFIG_STUDENT'] == 0 or $GLOBALS['SYSCONFIG_STUDENT'] == 1 and $teamPIN % 2 == 0) {
            $msg = $team->encodeText($msg);
        }
    }
    json_sendObject(array('message' => $msg));
}