TORONTO -- Michael Bradley scored in the 89th minute to complete a three-goal second-half comeback as Toronto FC defeated the Portland Timbers 3-2 in MLS play Saturday afternoon.

Rookie defender Nick Hagglund scored twice to set the stage for Bradley, whose curling free kick went through a mass of players and into the goal without being touched.

Portland lost both the lead and captain Will Johnson, who was stretchered off after suffering an ugly leg injury in the first minute.

Toronto (11-11-7) stretched its unbeaten streak to three (1-0-2) while recording a franchise record 11th win of the season, surpassing the club mark for victories (10) and points (39), both set during a 10-11-9 season in 2009.

It turned into a game of two halves, with Portland holding the edge in the first -- scoring twice in the first 16 minutes -- and Toronto taking over in the second.

The tying goal came in the 70th minute off another Bradley free kick that went through a mass of humanity before an open Hagglund, whose giveaway led to Portland's first goal, headed the ball down and it went in at the far post.

Hagglund had scored eight minutes earlier, rising high to head in a cross from Daniel Lovitz off a short corner for his first MLS tally. Minutes later, Portland goalie Donovan Ricketts stopped Dominic Oduro from in close minutes later to preserve the lead.

Toronto had an earlier chance to go ahead before Hagglund's heroics, with substitute Dwayne De Rosario blazing a shot high.

The game, played on a sunny 22 C afternoon at BMO Field, was a matchup of two teams on the playoff bubble, with both carefully watching results of clubs around them.

The Timbers (9-9-12) started the day in fifth place in the West while Toronto was seventh in the East, three points out of the layoff picture.

Fanendo Adi scored for Portland, which also got an own goal from Toronto captain Steven Caldwell.

The loss snapped Portland's unbeaten streak at four.

The game started on a disastrous note for Portland, with Johnson injuring his right leg in a shin-on-shin collision with Toronto fullback Mark Bloom in a 50-50 challenge that saw both players sliding to get to the ball first. Johnson immediately grabbed his right leg just below the knee and motioned to be substituted.

He was taken off on a stretcher after a lengthy delay with Bradley, a close friend and former teammate of Johnson's, one of the players gathered around the medical staff as they attended to the injured Timber. The injury led to eight minutes extra time at the end of the first half.

Bloom was able to continue and was not penalized on the play.

Referee Ismail Elfath pocketed his whistle for much of the game, infuriating both sides at different times but helping make for a fast-paced, exciting game.

The offensively gifted, defensively challenged Timbers came into the game with 52 goals, averaging 1.79 a game to stand third best in the league, and had scored three or more in three of their last four league games. And they carved open Toronto's backline repeatedly.

Things have been more chaotic at the other end with the Timbers giving up 1.66 goals a game prior to Saturday, ranking 15th in the league. Toronto had its chances but failed to make them count.

Portland went ahead when Hagglund's pass out of defence hit midfielder Diego Chara, who fed Adi. The Nigerian striker headed straight into the penalty box and his low shot beat Joe Bendik in the 1th minute.

Three minutes later, it was 2-0 after Toronto failed to clear a corner. Diego Valeri, who pulled the Portland strings for most of the day, raked the ball across the penalty box and it bounced in off Caldwell.

Caldwell thought he had repaid the debt three minutes later when his header off a Bradley free kick beat Ricketts. But the play was called offside.

Toronto should have pulled to within a goal in the 20th minute when Oduro's cross beat everyone and found Gilberto at the far post with the net wide open. But the Brazilian's stubbed shot somehow went wide.

Portland almost scored an own goal of its own in the 36th minute when defender Pa Modou Kah's attempted clearance of an Oduro cross rattled off the goalpost.

Rodney Wallace shot wide in the 53rd minute, clutching his head in disbelief after Portland sliced through the Toronto backline yet again.

Toronto came into the game almost fully healthy with the exception of striker Jermain Defoe (groin) and midfielder Collen Warner (hamstring). Oduro came in for Brazilian winger Jackson, who was serving the first half of a two-game suspension after his red card last weekend in the 3-0 victory over visiting Chivas USA.