Looks like they make use of ThreeJS. If I were to start this, I would break it into 3 steps:
1) Get the red outline of the continental U.S. with city labels in the appropriate spots
2) Animate the outline to rotate along the Z axis as a function of time, and around the X axis as a function of mouse position, with the labels only animating around the X axis.
3) Set event handlers for each city label that stops the animations, displays a picture in the background, and makes the show date pop up.
Easier said than done, of course, but the rest is just implementation details.