Load and play problem on NASA servers - please help

I am a contractor doing a Flash project for NASA. You can see it live here: http://www.nasa.gov/externalflash/LunarOutpost/index.html

On my local machine, test server, and their NASA staging server, everything works as intended. However, once they posted it to the live server we started seeing an occasional problem in Firefox. On about 1 out of 5 loads/refreshes, it will go through the preloader fine but when the preloader finishes and it gets to frame 2, things go bad. Frame 2 is where all the UI content is and all the code that tells things to hide, add listeners, etc.

When the problem happens, it appears that the code in frame 2 is not being run. Things that should be set visible = false are still visible, MovieClips that have multiple frames inside that have a stop() in them are just cycling through the timeline, and none of the buttons are functional.

In this state, if you right click->press “Play” it will play fine.

In IE, it seems like the whole thing is just being loaded backward. You don’t see the pre-loader and the video starts playing without buffering. I almost looks like it is loading frame 2 first.

Here is my preloader code in frame 1, on the bottom layer of the timeline:


stop();

addEventListener(Event.ENTER_FRAME,checkLoad);
function checkLoad(e:Event):void 
{
	var pcent:Number=this.loaderInfo.bytesLoaded /this.loaderInfo.bytesTotal*100;
	if (this.loaderInfo.bytesLoaded==this.loaderInfo.bytesTotal || this.framesLoaded==this.totalFrames) 
	{
		removeEventListener(Event.ENTER_FRAME,checkLoad);
		this.gotoAndStop(2);
	}
}

this.loaderInfo.addEventListener (ProgressEvent.PROGRESS, PL_LOADING);

function PL_LOADING(event:ProgressEvent):void {
	var pcent:Number=event.bytesLoaded/event.bytesTotal*100;
	loadingtext.text = "LOADING " + Math.round(pcent) + "%";
	bar.scaleX = 0.96*(pcent/100);
	
	if(pcent==100)
		this.gotoAndStop(2);
}

Here is my code in frame 2 on the bottom layer of the timeline:


import fl.video.*;

flvplayer.play();

var soundOn = true;
var currentNum = 1;
var currentState = 1;
bg.visible = false;
still.visible = false;
still.alpha = 1;
swfloader.visible = false;
panels.visible = false;
buttons.visible = false;
astronaut.visible = false;
home.visible = false;
gallery.visible = false;

var rolloverSnd:rollover = new rollover();
var rolloverBeep:rolloverSound = new rolloverSound();
rolloverBeep.volume = 0.2;
var buttonPress:buttonPressed = new buttonPressed();
var buttonClick:clicked = new clicked();
var blipSound:blip = new blip();
var elementRolloverSound:elementRollover = new elementRollover();
var metallicSound:metallic = new metallic();

var ambient:Sound = new Sound();
var req:URLRequest = new URLRequest("ambient.mp3");
var context:SoundLoaderContext = new SoundLoaderContext(50, true);
ambient.load(req, context);

var trans:SoundTransform = new SoundTransform(0.3, 0);
var channel:SoundChannel = ambient.play(0, 100, trans);
channel.stop();

panel.alpha = 0;
var numCrosshairs = 7;

navtext.buttonMode = true;
navtext.useHandCursor = true;
navtext.addEventListener(MouseEvent.CLICK, navtextClicked);
function navtextClicked(evt:Event):void
{
	playClick2();
	astronaut.closeLinks();
	if(currentState == 1)
	{
		panel.hidePanel();
		swfloader.closeDown();
		flvplayer.pause();
		bg.visible = true;
		playAmbientFromStart();
	}
	else if(currentState == 2)
	{
		//panel.hidePanel();
		panel.closePanel();
		swfloader.closeDown();
		hideCrosshairs();
		still.visible = false;
		channel.stop();
		flvplayer.source = "LunarLander_952.flv";
		flvplayer.addEventListener(VideoEvent.COMPLETE, videoComplete);
		flvplayer.seek(0);
		if(soundOn)
			flvplayer.volume = 0.7;
		flvplayer.play();
		newState(1);
	}
	else if(currentState == 3)
	{
		returnToBeg();
	}
}

function newState(num:Number):void
{
	currentState = num;
	if(currentState == 1)
		navtext.innertext.text = "skip intro";
	else if(currentState == 2)
		navtext.innertext.text = "replay intro";
	else if(currentState == 3)
		navtext.innertext.text = "home";
		
	//var txt_fmt:TextFormat = new TextFormat();
	//txt_fmt.leading = 40;
	//navtext.innertext.setTextFormat(txt_fmt);
}

home.buttonMode = true;
home.useHandCursor = true;
home.addEventListener(MouseEvent.CLICK, homeClicked);
function homeClicked(evt:Event):void
{
	playClick2();
	astronaut.closeLinks();
	panel.hidePanel();
	swfloader.closeDown();
}

for(var i = 0; i<numCrosshairs; i++)
{
	buttons["crosshairs" + (i+1)].visible = false;
	//MovieClip(index)["index" + (i+1)].buttonMode = true;
	//MovieClip(index)["index" + (i+1)].useHandCursor = true;
	//MovieClip(index)["index" + (i+1)].addEventListener(MouseEvent.CLICK, crosshairsClicked);
	buttons["crosshairs" + (i+1)].buttonMode = true;
	buttons["crosshairs" + (i+1)].useHandCursor = true;
	buttons["crosshairs" + (i+1)].mouseChildren = false;
	buttons["crosshairs" + (i+1)].addEventListener(MouseEvent.CLICK, crosshairsClicked);
}

function hideCrosshairs():void 
{
	flvplayer.removeEventListener(VideoEvent.COMPLETE, videoComplete);
	swfloader.closeDown();
	for(var i = 0; i<numCrosshairs; i++)
	{
		buttons["crosshairs" + (i+1)].visible = false;
	}
}

function showCrosshairs():void
{
	bg.visible = true;
	home.visible = true;
	astronaut.visible = true;
	buttons.visible = true;
	gallery.visible = true;
	panels.visible = true;
	firstpanel.visible = false;
	newState(2);
	for(var i = 0; i<numCrosshairs; i++)
	{	
		buttons["crosshairs" + (i+1)].visible = true;
	}
}

function crosshairsClicked(evt:MouseEvent):void
{  
	//flvplayer.seek(6);
	//flvplayer.play();
	astronaut.closeLinks();
	hideCrosshairs();
	panel.clearText();
	swfloader.clearContent();
	playClick();
	panel.panel.viewmovie.visible = true;
	switch(evt.target.name)
	{
		case "crosshairs1":
			flvplayer.source = "zooms/LERzoom.flv";
			//panel.showName(1);
			currentNum = 1;
			break;
		case "crosshairs2":
			flvplayer.source = "zooms/ATHLETEzoom.flv";
			//panel.showName(2);
			currentNum = 2;
			break;
		case "crosshairs3":
			flvplayer.source = "zooms/HabZoom.flv";
			//panel.showName(3);
			currentNum = 3;
			panel.panel.viewmovie.visible = false;
			break;
		case "crosshairs4":
			flvplayer.source = "zooms/PUPzoom.flv";
			//panel.showName(4);
			currentNum = 4;
			break;
		case "crosshairs5":
			flvplayer.source = "zooms/ISRUzoom.flv";
			//panel.showName(5);
			currentNum = 5;
			break;
		case "crosshairs6":
			flvplayer.source = "zooms/LSMSzoom.flv";
			//panel.showName(6);
			currentNum = 6;
			break;
		case "crosshairs7":
			flvplayer.source = "zooms/LanderZoom.flv";
			//panel.showName(7);
			currentNum = 7;
			break;
		/*case "crosshairs8":
			flvplayer.source = "zooms/LSMSzoom.flv";
			panel.showName(1);
			break;*/
		default:
			break;
	}
	panels.startTitle(currentNum);
	still.visible = false;
	flvplayer.play();
	flvplayer.addEventListener(VideoEvent.COMPLETE, videoDone);
	showLoadingBall();
}

function galleryClicked(iconName:String):void
{
	astronaut.closeLinks();
	if(currentNum == getNumberFromName(iconName) && currentState == 3)
	{
		//Do nothing dummy
	}
	else
	{												
		hideCrosshairs();
		panel.clearText();
		swfloader.clearContent();
		playClick();
		panel.panel.viewmovie.visible = true;
		switch(iconName)
		{
			case "icon1":
				flvplayer.source = "zooms/LERzoom.flv";
				//panel.showName(1);
				currentNum = 1;
				break;
			case "icon2":
				flvplayer.source = "zooms/ATHLETEzoom.flv";
				//panel.showName(2);
				currentNum = 2;
				break;
			case "icon3":
				flvplayer.source = "zooms/HabZoom.flv";
				//panel.showName(3);
				currentNum = 3;
				panel.panel.viewmovie.visible = false;
				break;
			case "icon4":
				flvplayer.source = "zooms/PUPzoom.flv";
				//panel.showName(4);
				currentNum = 4;
				break;
			case "icon5":
				flvplayer.source = "zooms/ISRUzoom.flv";
				//panel.showName(5);
				currentNum = 5;
				break;
			case "icon6":
				flvplayer.source = "zooms/LSMSzoom.flv";
				//panel.showName(6);
				currentNum = 6;
				break;
			case "icon7":
				flvplayer.source = "zooms/LanderZoom.flv";
				//panel.showName(7);
				currentNum = 7;
				break;
			/*case 8:
				flvplayer.source = "zooms/LSMSzoom.flv";
				panel.showName(1);
				break;*/
			default:
				break;
		}
		panels.startTitle(currentNum);
		still.visible = false;
		flvplayer.play();
		flvplayer.addEventListener(VideoEvent.COMPLETE, videoDone);
		showLoadingBall();
	}
}

flvplayer.addEventListener(VideoEvent.COMPLETE, videoComplete);
function videoComplete(evt:Event):void
{
	showCrosshairs();
	playAmbient();
	flvplayer.removeEventListener(VideoEvent.COMPLETE, videoComplete);
	bg.visible = true;
	still.visible = true;
}

function videoDone(evt:Event):void
{
	//trace(flvplayer.playheadTime);
	hideLoadingBall();
	bg.visible = true;
	flvplayer.removeEventListener(VideoEvent.COMPLETE, videoDone);
	panel.showPanel(currentNum);
	newState(3);
}

/*flvplayer.addEventListener(VideoEvent.PLAYHEAD_UPDATE, beginning);
function beginning(evt:Event):void
{
	//trace(flvplayer.playheadTime);
	if(flvplayer.playheadTime > 18)
	{
		flvplayer.stop();
		flvplayer.removeEventListener(VideoEvent.PLAYHEAD_UPDATE, beginning);
		showCrosshairs();
	}
}

function end(evt:Event):void
{
	//trace(flvplayer.playheadTime);
	if(flvplayer.playheadTime > 12)
	{
		flvplayer.stop();
		flvplayer.removeEventListener(VideoEvent.PLAYHEAD_UPDATE, end);
		showCrosshairs();
	}
}*/

function returnToBeg():void
{
	//flvplayer.source = "LunarOutpost_flashApp.flv";
	//flvplayer.addEventListener(VideoEvent.COMPLETE, videoComplete);
	panel.hidePanel();
	swfloader.closeDown();
	panels.setHomeText();
	//flvplayer.scaleX = 1;
	//flvplayer.scaleY = 1;
	//flvplayer.x = 0;
	//flvplayer.y = -87;
	//flvplayer.seek(0);
	//flvplayer.play();
}

function loadSWF():void
{
	switch(currentNum)
	{
		case 1:
			MovieClip(swfloader).loadSWF("1");
			break;
		case 2:
			MovieClip(swfloader).loadSWF("2");
			break;
		case 3:
			MovieClip(swfloader).loadSWF("3");
			break;
		case 4:
			MovieClip(swfloader).loadSWF("4");
			break;
		case 5:
			MovieClip(swfloader).loadSWF("5");
			break;
		case 6:
			MovieClip(swfloader).loadSWF("6");
			break;
		case 7:
			MovieClip(swfloader).loadSWF("7");
			break;
		/*case 8:
			flvplayer.source = "zooms/LSMSzoom.flv";
			panel.showName(1);
			break;*/
		default:
			break;
	}
}

function loadVideo():void
{
	switch(currentNum)
	{
		case 1:
			MovieClip(swfloader).loadVideo("1");
			break;
		case 2:
			MovieClip(swfloader).loadVideo("2");
			break;
		case 3:
			//MovieClip(swfloader).loadVideo("3");
			break;
		case 4:
			MovieClip(swfloader).loadVideo("4");
			break;
		case 5:
			MovieClip(swfloader).loadVideo("5");
			break;
		case 6:
			MovieClip(swfloader).loadVideo("6");
			break;
		case 7:
			MovieClip(swfloader).loadVideo("7");
			break;
		/*case 8:
			flvplayer.source = "zooms/LSMSzoom.flv";
			panel.showName(1);
			break;*/
		default:
			break;
	}
}

function loadGallery():void
{
	switch(currentNum)
	{
		case 1:
			MovieClip(swfloader).loadGallery("1");
			break;
		case 2:
			MovieClip(swfloader).loadGallery("2");
			break;
		case 3:
			MovieClip(swfloader).loadGallery("3");
			break;
		case 4:
			MovieClip(swfloader).loadGallery("4");
			break;
		case 5:
			MovieClip(swfloader).loadGallery("5");
			break;
		case 6:
			MovieClip(swfloader).loadGallery("6");
			break;
		case 7:
			MovieClip(swfloader).loadGallery("7");
			break;
		/*case 8:
			flvplayer.source = "zooms/LSMSzoom.flv";
			panel.showName(1);
			break;*/
		default:
			break;
	}
}

function selectionOver(evt:MouseEvent):void
{
	playElementRollover();
		
	var iconIndex:Number;
	
	iconIndex = getNumberFromName(evt.target.name);
	
	//buttons["crosshairs"+iconIndex].spinning = true;
	buttons["crosshairs"+iconIndex].showProjector(iconIndex);
	panels.startText(iconIndex);
}

function selectionOut(evt:MouseEvent):void
{
	var iconIndex:Number;
	
	iconIndex = getNumberFromName(evt.target.name);
	panels.resetPanelText();
		
	//buttons["crosshairs"+iconIndex].spinning = false;
	buttons["crosshairs"+iconIndex].hideProjector();
}

addEventListener(MouseEvent.MOUSE_MOVE, mouseMoved);

function mouseMoved(evt:MouseEvent):void
{
	panels.range.text = mouseX + "." + mouseY;
	firstpanel.range.text = mouseX + "." + mouseY;
}

function getNumberFromName(stringName:String):Number
{
	if(stringName.length > 5)
	{
		return Number(stringName.charAt(10));
	}
	else
	{
		return Number(stringName.charAt(4));
	}
}

function muteSound():void
{
	MovieClip(root).flvplayer.volume = 0;
	soundOn = false;
	
	channel.stop();
}

function unmuteSound():void
{
	MovieClip(root).flvplayer.volume = 0.7;
	soundOn = true;
	playAmbient();
}

function playClick():void
{
	if(soundOn)
	{
		rolloverSnd.play();
	}
}

function playZoom():void
{
	if(soundOn)
	{
		//zoomSnd.play();	
	}
}

function playRollover():void
{
	if(soundOn)
	{
		rolloverBeep.play();
	}
}

function playClick2():void
{
	if(soundOn)
	{
		buttonClick.play();
	}
}

function playPressed():void
{
	if(soundOn)
	{
		buttonPress.play();
	}
}

function playAmbient():void
{
	if(soundOn && currentState > 1)
	{
		channel = ambient.play(0, 100, trans);
	}
}

function playAmbientFromStart():void
{
	if(soundOn)
	{
		channel = ambient.play(0, 100, trans);
	}
}

function playBlip():void
{
	if(soundOn)
	{
		blipSound.play();
	}
}

function playElementRollover():void
{
	if(soundOn)
	{
		elementRolloverSound.play();
	}
}

function playMetallic():void
{
	if(soundOn)
	{
		metallicSound.play();
	}
}

function showLoadingBall():void
{
	loadingball.visible = true;
	Mouse.hide();
	loadingball.x = mouseX;
	loadingball.y = mouseY;
	addEventListener(MouseEvent.MOUSE_MOVE, loadingMouseMoved);
	gallery.mouseChildren = false;
}

function loadingMouseMoved(evt:MouseEvent):void
{
	loadingball.x = mouseX;
	loadingball.y = mouseY;
}

function hideLoadingBall():void
{
	loadingball.visible = false;
	Mouse.show();
	removeEventListener(MouseEvent.MOUSE_MOVE, loadingMouseMoved);
	gallery.mouseChildren = true;
}

stop();

Does anybody have any idea what might be causing these issues? Could it be related to load order or garbage collection? Any help is greatly appreciated.