Start with this beautiful image I found on Flickr.
Add a hue/saturation layer, then merge it with the smoke layer.
Duplicate this layer and add a hue/saturation layer.
The 2nd layer should now be purple. Merge it with the hue/saturation layer as we've been doing.
Change the blending mode of the 2nd layer to Difference, then move it a few pixels away from the 1st layer so green and purple are both visible.
Do the same 'duplicate > hue/saturation > merge down > set blending mode to difference' routine one more time to make another layer that is blue. Here are the hue/saturation settings:
Finally, add a 'Twirl' filter (Filter > Distort > Twirl) to the top blue layer:
And you're done!
Mine looks like this: