They lost their last six wickets for 26 runs to be all out for 298 before tea.
England were sitting pretty at 219 for one at close on Thursday evening when Andrew Strauss (96) and Michael Vaughan (79) were going strong, but a-three hour rain delay on Friday morning clearly upset their applecart.
Indian seamers, who wasted the new ball on day one with some wayward bowling, utilised the new ball to the perfection today. Sreesanth and Zaheer extracted the moisture in the strip to send hosts packing in no time.
Resuming at 268 for 4, the first to go was night-watchman Ryan Sidebottom (1) to Rudra Pratap Singh followed by the one that really boosted India.
Kevin Pietersen was out for 37, caught Dhoni off left-armer Zaheer Khan to make the score 282 for six.
Ian Bell had a bright start with an elegant straight driven four first ball and a pulled six but with wickets tumbling at one end did not helped his cause.
He was the last man out for 20 after Sreesanth had trapped three England tailenders lbw.
India are seeking to win their first Test series in England since 1986.
England Ist innings 298 all out (Strauss 96, Vaughan 79, Pietersen 37, Cook 36, Bell 20; Sreesanth 3 for 67, Zaheer 2 for 62, R P Singh 2 for 58) Vs India.