Q: How to map a video onto three.js geometry? Preface
I've created a super contrived example of what I want to create of using 3js geometry and video. I'm certain it wont need html5 video but the demo uses it for visiblity.
Here is a live code hosted by 
codepen.io
Problem:
I'm super new to webGL and associated libraries(3js).  
Question:
How do I map a video onto a sphere using 3js?
JS
  // renderer
  var renderer = new THREE.WebGLRenderer();
  renderer.setSize(window.innerWidth, window.innerHeight);
  document.body.appendChild(renderer.domElement);

  // camera
  var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 1000);
  camera.position.z = 500;

  // scene
  var video, texture; 
  video = document.getElementById( 'video' );

  var scene = new THREE.Scene();
  texture = new THREE.VideoTexture( video );
  texture.minFilter = THREE.LinearFilter;
  texture.magFilter = THREE.LinearFilter;
  texture.format = THREE.RGBFormat;

 //sphere
  var sphere = new THREE.Mesh(new THREE.SphereGeometry(150, 100, 100), new THREE.MeshNormalMaterial());
  sphere.overdraw = true;
  scene.add(sphere);

  renderer.render(scene, camera);

HTML
  <!--sphere gets placed here -->
    <div id="container"></div>
    <!-- example video -->
    <video id="video" width="400" src="http://avideos.5min.com//415/5177415/517741401_4.mp4#t=20"autoplay muted loop></video>


A: here's what I've assimilated from other posts I've found:
        // setting up the renderer
        var renderer = new THREE.WebGLRenderer();
        renderer.setSize(window.innerWidth, window.innerHeight);

        var container = document.createElement('div');
        document.body.appendChild( container );
        container.appendChild( renderer.domElement );
        // creating a new scene
            // SCENE
        scene = new THREE.Scene();
        // CAMERA
        var SCREEN_WIDTH = window.innerWidth, SCREEN_HEIGHT = window.innerHeight;
        var VIEW_ANGLE = 100, ASPECT = SCREEN_WIDTH / SCREEN_HEIGHT, NEAR = 0.1, FAR = 20000;
        var camera = new THREE.PerspectiveCamera( VIEW_ANGLE, ASPECT, NEAR, FAR);
        camera.target = new THREE.Vector3(0, 0, 0);

        camera.position.set(0,150,400);
        camera.lookAt(scene.position);  

        scene.add(camera);

        var video = document.getElementById( 'myVideo' );

        //sorry, not 100% sure why this is necessary -eg why the renderer doesn't automatically update the video texture in render()
        videoImageContext = videoImage.getContext( '2d' );
        // background color if no video present
        videoImageContext.fillStyle = '#000000';
        videoImageContext.fillRect( 0, 0, videoImage.width, videoImage.height );

        videoTexture = new THREE.Texture( video );
        videoTexture.minFilter = THREE.LinearFilter;
        videoTexture.magFilter = THREE.LinearFilter;

        var movieMaterial = new THREE.MeshBasicMaterial( { map: videoTexture,overdraw: true } );

        // the geometry on which the movie will be displayed;
        //      movie image will be scaled to fit these dimensions.
        var sphere = new THREE.SphereGeometry(100, 100, 40);
        sphere.applyMatrix(new THREE.Matrix4().makeScale(-1, 1, 1));
        var movieScreen = new THREE.Mesh( sphere, movieMaterial );
        scene.add(movieScreen);


           render();



        function render(){

            requestAnimationFrame(render);
            if ( video.readyState === video.HAVE_ENOUGH_DATA ) 
            {
                videoImageContext.drawImage( video, 0, 0 );
                if ( videoTexture ) 
                    videoTexture.needsUpdate = true;
            }
            // calling again render function
            renderer.render(scene, camera);

        }

