Jorge Lorenzo moved one point clear at the top of world championship standings after winning the French MotoGP ahead of Marco Melandri and Dani Pedrosa.
Slippery conditions saw all the riders come into the pits and change bikes in a bid to find the right tyres.
Reigning champion Valentino Rossi finished last, out of the points, after crashing shortly after changing bikes.
Casey Stoner finished fifth and Briton James Toseland had his best finish of the season, coming home in ninth.
"It's been a crazy race," said Lorenzo afterwards.
"With the rain tyres it was important to change at the right time - if you changed later you can win. I think we changed at the right point and after that I was riding quite confidently and I won," he said.
Melandri's future looked to be in doubt after a nightmare spell at Ducati last year, so he was even more appreciative than most to finish on the podium.
"It's awesome, it's been very tough but after the Spanish Grand Prix at Jerez I was positive, and I came here to do my best," he said.
"I knew if I was going to be quiet I could make a good race, and when I saw P2 I couldn't believe it. I saw the gap behind was quite big and I pushed to try and keep it."
Rossi had a rare point-free day which cost him the lead in the championship standings, but he wrote it off as just a piece of bad luck.
"Already by the fourth lap I felt that I was quite slow and that I couldn't ride as I wanted. I decided to change bikes early because usually this strategy - being among the first to change the bike - pays off," he said.
Lorenzo delighted to win 'crazy race'
"Of course I knew that I had to warm the tyres up a little bit but I crashed anyway in that corner because at that point the track was still wet and I just didn't ride into it in a calm enough manner."
In the 250cc race, defending champion Marco Simoncelli continued to make up for his faltering start to the season, coming home ahead of Hector Faubel and Robert Locatelli.
Having failed to score in the first two races of the season, Simoncelli has now managed a third place in Spain and a first place in France to move fourth in the championship standings.
Last year Simoncelli began the season by failing to score points in the first two races, as happened this year, but still went on to win the title.
In the 125cc race, Bradley Smith had to make do with fourth place, despite setting the fastest lap-time of the race on his final lap.
Julian Simon won the race by over 27 seconds to take the overall lead in the championship, as many of his championship rivals slipped off in wet conditions.
Jonas Folger finished second, with Sergio Gadea just edging out Smith for third place. Scott Redding slid off halfway through the race when in fifth place.
French MotoGP result: 1 J Lorenzo (Sp) Fiat Yamaha 47 mins 52.678 secs 2 M Melandri (It) Kawasaki 48:10.388 3 D Pedrosa (Sp) Honda 48:12.571 4 A Dovizioso (It) Honda 48:13.133 5 C Stoner (Aus) Ducati 48:23.217 6 C Vermuelen (Aus) Suzuki 48:30.140 7 C Edwards (US) Tech 3 Yamaha 48:32.869 8 L Capirossi (It) Suzuki 48:38.099 9 J Toseland (GB) Tech 3 Yamaha 48:42.985 10 T Elias (Sp) Honda Gresini 48:45.896 11 A de Angelis (RSM) Honda Gresini 48:46.228 12 N Hayden (US) Ducati 48:49.325 13 Y Takahashi (Jpn) Scot Racing 48:49.366 14 R de Puniet (Fr) Honda 49:03.977 15 N Canepa (It) Pramac Racing 49:08.063 16 V Rossi (It) Fiat Yamaha @ 2 laps
MotoGP world championship standings:
1 J Lorenzo 66 pts 2 V Rossi 65 3 C Stoner 65 4 D Pedrosa 57 5 M Melandri 43 6 A Dovizioso 43 7 C Edwards 35 8 C Vermeulen 31 9 L Capirossi 27 10 R de Puniet 26 11 T Elias 21 12 A de Angelis 20 13 J Toseland 17 14 M Kallio 16 15 N Hayden 9 16 S Gibernau 8 17 Y Takahashi 8 18 N Canepa 3
250cc race result:
1 M Simoncelli (Ita) Gilera 49 mins 7.591 secs 2 H Faubel (Sp) Honda 49:25.719 3 R Locatelli (Ita) Gilera 49:29.233
250cc championship standings:
1 A Bautista (Sp) Aprilia 67 pts 2 H Aoyama (Jpn) Honda 66 3 H Barbera (Sp) Aprilia 48
125cc race result:
1 J Simon (Sp) Aprilia 47 mins 8.273 secs 2 J Folger (Ger) Aprilia 47:35.357 3 S Gadea (Sp) Aprilia 47:39.189 4 B Smith (GB) Aprilia 47:39.803
125cc championship standings:
1 J Simon (Sp) Aprilia 55 pts 2 B Smith (GB) Aprilia 49.5
3 A Iannone (It) Aprilia 46.5
This page is best viewed in an up-to-date web browser with style sheets (CSS) enabled. While you will be able to view the content of this page in your current browser, you will not be able to get the full visual experience. Please consider upgrading your browser software or enabling style sheets (CSS) if you are able to do so.