London: Stuart Broad, who rescued the England first innings on Friday with 64 from 66 balls, took five wickets for no runs in 15 balls to finish with a Test best of six for 46 from 24.1 overs.
At the close of the second day England were 24 for one in their second innings, an overall deficit of 43, after dismissing India for 288.
Broad's heroics, after India were cruising at 267 for four, overshadowed an immaculate century by Indian makeshift opener Rahul Dravid, who made 117 in 370 minutes at the crease. He was dismissed, caught at third man off Tim Bresnan, after the hat-trick attempting to force the pace.
Scorecard | India v England
The England all-rounder's latest effort with the ball sparked memories of another dynamic England all-rounder Ian Botham, whose exploits helped win the Ashes in 1981. Fittingly on the 30th anniversary of that series Broad bettered Botham's five wickets for one at Edgbaston.
For the hat-trick Broad took the wickets of India captain Mahendra Singh Dhoni (5), Harbhajan Singh (0) and Praveen Kumar (0).
Dhoni was caught at second slip for five, Harbhajan was lbw first ball though his reaction suggested an incorrect decision from umpire Marais Erasmus, which was confirmed by replays that showed an inside edge on to his pad.
Broad then scattered Kumar's stumps next ball. Ryan Sidebottom was the last England bowler to claim three wickets in as many balls in a test, against New Zealand in 2008.
The one negative for England in an otherwise perfect evening session was the loss of opener Cook who was caught at point for five off Ishant Sharma.
Another low, after lunch, was the injury sustained by batsman Jonathan Trott, though scans revealed no bone damage to his left shoulder after a freak fielding accident, when diving to stop the ball.
Dravid hits 34th ton, equals Gavaskar's record
India had started the morning brightly as VVS Laxman (54) and Dravid put on 93 for the second wicket. Laxman was caught behind off Bresnan, while Sachin Tendulkar, bidding for a century of international hundreds, fell to the first over after lunch for 16 when he edged an attempted square cut off Broad.
England might have applied the pressure much earlier if Kevin Pietersen had held a catch in the gully off Broad from Yuvraj when on four. He went on to score 62.
England lead the four-match series 1-0 after winning at Lord's by 196 runs.