
var IM_PLAYER_NATIVE = 1;
var IM_PLAYER_FLASH = 2;

var VIDEO_PROXY_STATE_UNINITIALIZED	= 0;
var VIDEO_PROXY_STATE_STOPPED 		= 1;
var VIDEO_PROXY_STATE_PAUSED 		= 2;
var VIDEO_PROXY_STATE_PLAYING 		= 3;
var VIDEO_PROXY_STATE_SEEKING 		= 4;
var VIDEO_PROXY_STATE_BUFFERING 	= 5;
var VIDEO_PROXY_STATE_STALLED 		= 6;
var VIDEO_PROXY_STATE_LOADED 		= 7;
var VIDEO_PROXY_STATE_LOAD_FAILED   = 8;


var VIDEO_PROXY_EVENT_START           = "VIDEO_START";
var VIDEO_PROXY_EVENT_FINISHED        = "VIDEO_FINISHED";
var VIDEO_PROXY_EVENT_ERROR_FAILED    = "VIDEO_ERROR_FAILED";
var VIDEO_PROXY_EVENT_ERROR_NOT_FOUND = "VIDEO_ERROR_NOT_FOUND";
var VIDEO_PROXY_EVENT_PAUSE           = "VIDEO_PAUSE";
var VIDEO_PROXY_EVENT_PLAY            = "VIDEO_PLAY";
var VIDEO_PROXY_EVENT_CLOSE           = "VIDEO_CLOSE";


var ROOT_NODE_ID = -1000;   	// the invisible root node at 0,0
var USER_NODE_ID = -1001;   	// the sphere+camera
var SCENEROOT_NODE_ID = -1002;
var SPHERE_NODE_ID = -1003;     // the sphere node for the current scene/frame
var UNSIGNED_ID = -2000; 	// someone didn't have an id.. for example the dummy load node.

var NODE_TYPE_GEO				= "GeoNode";  		// node without a type
var NODE_TYPE_ROOT 				= "GeoRoot";  		// the root node... invisible at 0,0.  everything else is it's child
var NODE_TYPE_USER 				= "GeoUser";  		// camera + sphere
var NODE_TYPE_IMAGE             = "GeoImage";       // plane (can be billboard)
var NODE_TYPE_TEXT              = "GeoText";        // text node
var NODE_TYPE_VIDEO             = "GeoVideo";       // video node


var playerType = IM_PLAYER_NATIVE;
var flashPlayer  = 0;
var nativePlayer = 0;
var g_usingBridge = false;
var g_attractImage="attractImage.jpg";
var g_guiPluginId=-9999;




function setGuiPluginId(pluginId)
{
	//alert("setGuiPliginId("+pluginId+")");
	g_guiPluginId = pluginId;
}

function getFlashMovie(movieName) {
    var isIE = navigator.appName.indexOf("Microsoft") != -1;
    return (isIE) ? window[movieName] : document.getElementById(movieName);
}

// for use with asynch load of movies from the flash player

var OldOnVideoLoadedHandler=null;
 
function ltrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

 
function rtrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}


function trim(str, chars) {
	return ltrim(rtrim(str, chars), chars);
}


function ProxyTestAlert(foo)
{
	alert(foo);
}

function hidePlaybar()
{
	//alert("hidePlaybar() g_guiPluginId="+g_guiPluginId);
	if (g_guiPluginId===-9999)
	{
		//alert("hidePlaybar()id=null");
		return;
	}
	//alert("hidePlaybar()");
	flashPlayer.setPluginProperty(g_guiPluginId,'visible',false);
}

function showPlaybar()
{
	//alert("hidePlaybar() g_guiPluginId="+g_guiPluginId);
	if (g_guiPluginId===-9999)
	{
		//alert("showPlaybar()id=null");
		return;
	}
	//alert("showPlaybar()");
	flashPlayer.setPluginProperty(g_guiPluginId,'visible',true);
}

function ProxySetVideoTypeByExtension(ext)
{
	if (trim(ext).toLowerCase	()=="flv")
	{
		ProxySetMapperTargetType(IM_PLAYER_FLASH);
	}
	else
	{
		ProxySetMapperTargetType(IM_PLAYER_NATIVE);
	}
}

function ProxySetMapperTargetType(typeSet)
{
	//alert("ProxySetMapperTargetType");
	playerType = typeSet;
}


function ProxySetMapperFlashTarget(IMViewer)
{
	//alert("ProxySetMapperFlashTarget" + IMViewer);
	flashPlayer = IMViewer;		
	//IMViewer.clearScene();
}

function ProxySetMapperNativeTarget(IMViewer)
{
	nativePlayer = IMViewer;		
}



function ProxyUnloadMovie()
{

	if (playerType==IM_PLAYER_NATIVE)
	{
		if(nativePlayer === 0)
		{
			return 0;
		}
		var ret = nativePlayer.OpenMovie("",0.0,false);	
		var dte = new Date();
		var timeout = dte.getSeconds() + 4; 
		while(dte.getSeconds() < timeout)
		{
			dte = new Date();
	
			if(nativePlayer.GetMovieDuration() > 0.0)
			{
				
				return 1;
			}
		}
	}
	else //flash player
	{
		if(flashPlayer === 0)
		{
			return 0;
		}
		
		clearMovie();
		
		return 1;
	}
	return 0;
}


function ProxyPause()
{

		
	if (playerType==IM_PLAYER_NATIVE)
	{
		if(nativePlayer === 0)
		{
			return 0;
		}
		nativePlayer.Pause();
	}
	else //flash player
	{
		if(flashPlayer === 0)
		{
			return 0;
		}
		flashPlayer.pauseVideo();
	}

}



function setUsingBridge(isUsing)
{
	g_usingBridge=isUsing;
}

function ProxyLoadAttractLoop(url,projection)
{
	if(flashPlayer === 0)
	{		
		return 0;
	}	
	//alert("proxyLoadAttractLoop()");
	//var ret = flashPlayer.loadVideo(trim(url),0,false,projection);
	//flashPlayer.setMediaProperty('loopEnabled', true);
	//hidePlaybar();
}

function ProxyLoadAttractStill(url,projection)
{
	if(flashPlayer === 0)
	{		
		return 0;
	}
	
	//alert("proxyLoadAttractStill(): url=" + url + ", projection=" + projection);
	//var ret = flashPlayer.loadStill(trim(url),projection);
	//hidePlaybar();
}

function ProxySetMovieSource(url,starttime,projection)
{
	var ret =0;

	if (playerType==IM_PLAYER_NATIVE)
	{
		if(nativePlayer === 0)
		{
			//alert("ProxySetMovieSource(): nativePlayer=0.  returning"); 
			return 0;
		}
		
		ret = nativePlayer.OpenMovie(url,starttime,true);
		
		var dte = new Date();
		
		var nativePlayer = dte.getSeconds() + 4; 
		
	
		while(dte.getSeconds() < timeout)
		{
			dte = new Date();
			
			if(nativePlayer.GetMovieDuration() > 0.0)
			{
				nativePlayer.Play () ;
			
				nativePlayer.Pause () ;
				return 1;
			}
		}
	}
	else //flash player
	{
		//alert("ProxySetMovieSource(): " + url);
		if(flashPlayer === 0)
		{
			//alert("ProxySetMovieSource(): flashPlayer=0.  returning"); 
			return 0;
		}
		if (g_usingBridge)
		{
			SetFlashMovieSourceBridge(url, starttime,projection);
		}
		else
		{
			SetFlashMovieSourceNonBridge(url, 0,projection);
		}
	}
	return 0;
} 

function SetFlashMovieSourceNonBridge(url,starttime,projection)
{
	resetRotations();
	

	ret = flashPlayer.loadVideo(trim(url),starttime,false,projection);
	showPlaybar();
	
}


function SetFlashMovieSourceBridge(url,starttime,projection)
{
	
	resetRotations();
	var ret =0;

	if(flashPlayer === 0)
	{
		return 0;
	}

	ret = flashPlayer.loadVideo(trim(url), 0, true, projection);
	showPlaybar();
	return 0;
} 

function clearMovie()
{
	//ProxyLoadStill(g_attractImage,0);
}

function ProxyLoadStill(stillUrl,stillHeading,projection)
{
	
	//alert("ProxyLoadStill(): url=" + stillUrl + ", heading=" + stillHeading +", projection=" + projection);
	//alert("ProxyLoadStill(): url: " + stillUrl);
	resetRotations();
	//alert("ProxyLoadStill(): set heading");
	setHeading(stillHeading);	
	//alert("ProxyLoadStill(): load still");
//	flashPlayer.loadStill(stillUrl,projection);	
//	hidePlaybar();
}																 



function resetRotations()
{
	flashPlayer.setScreenRotation(0,0,0);	
	var r = flashPlayer.getScreenRotation();
	flashPlayer.setCameraProperty("yaw",r.yaw);
	flashPlayer.setCameraProperty("pitch",r.pitch);
	flashPlayer.setCameraProperty("roll",r.roll);
}

function setHeading(newHeading)
{
	var yaw;
	var pitch;
	var roll;
	var r= flashPlayer.getScreenRotation();
	roll = r.roll;
	pitch = r.pitch;
	yaw = parseFloat(newHeading);	
	flashPlayer.setScreenRotation(yaw,pitch,roll);	
}


function ProxyGotoTime(atTime)
{

	//Viewer.Pause () ;
	//alert("ProxyGotoTime: " +atTime);
	var ret = 0;
	if (playerType==IM_PLAYER_NATIVE)
	{
		if(nativePlayer === 0)
		{
			return 0;
		}
		ret = nativePlayer.SetMovieTime(atTime);
		return ret == 1;
	}
	else //flash player
	{
		if(flashPlayer === 0)
		{
			return 0;
		}
		ret = flashPlayer.seekVideo(atTime);
		return 1;
	}
}


function ProxyBrowserAlert(message)
{
	alert(message);
}

function OnBrowserLinkRequest(InputString, popup)
{
	alert("OnBrowserLinkRequest():"+inputString);
	startMovie(inputString);
}

function OnDropAnchor(anchorNumber)
{
	if (window.OnSceneBridge)
	{
		window.OnSceneBridge.onDropAnchor(anchorNumber);
	}
}


// you can override this function if you would like to create 
// custom functionality on clicking a link icon
function BrowseTo(url,newWindow)
{
	requestNewUrl(url,newWindow);
}	


function requestNewUrl(url,newWindow)	
{
	//alert("IMC_MapperViewerProxy.js::BrowseTo: " + url +", newWindow:" + newWindow);
	var teststr = url.toLowerCase().substr(0,7);
	//alert("IMC_MapperViewerProxy.js::BrowseTo: teststr=" + teststr);
	if (teststr!="http://")
	{
		url = "http://"+url;
	}
	
	if (newWindow)
	{	
		//window.open(url,'IMOnScene',"status=1,toolbar=1, scrollbars=1, resizable=1, left=20, top=20");
		$.fancybox({'type' : 'iframe', 'href' : url, 'transitionIn' : 'fade', 'transitionOut' : 'fade', 'width' : 825, 'height' : 565, 'speedIn' : 400, 'speedOut' : 200, 'overlayOpacity' : '0.6', 'overlayColor' : '#000', 'padding' : '0', 'scrolling' : 'no', 'autoScale' : false});	
	}
	else
	{
		//alert("IMC_MapperViewerProxy.js::BrowseTo: about to browse without popup to: " + url);
		//window.navigate(url);
		
		//window.document.location = url;
		$.fancybox({'type' : 'iframe', 'href' : url, 'transitionIn' : 'fade', 'transitionOut' : 'fade', 'width' : 825, 'height' : 565, 'speedIn' : 400, 'speedOut' : 200, 'overlayOpacity' : '0.6', 'overlayColor' : '#000', 'padding' : '0', 'scrolling' : 'no', 'autoScale' : false});
	}
	
}

function setBackingStills(root, fps, extension, minDigits, frameOffset)
{
	//alert("gothere1");
	if (root === null)
	{
		return;
	}
	if (frameOffset === null)
	{
		frameOffset = 1;
	}
	if (minDigits === null)
	{
		minDigits = 5;
	}
	if (extension === null)
	{
		extension = ".jpg";
	}
	if (fps === null)
	{
		fps = 29.97;
	}
	//alert("gothere2");
	
	flashPlayer.setMediaProperty('stillsUrlRoot', root);
	flashPlayer.setMediaProperty('stillsFps', fps);
	flashPlayer.setMediaProperty('stillsExtension', extension);
	flashPlayer.setMediaProperty('stillsMinDigits', minDigits);
	flashPlayer.setMediaProperty('stillsFrameOffset', frameOffset);
}

function setLoopEnabled(enabled)
{
		flashPlayer.setMediaProperty('loopEnabled', enabled);
}

function setScreen(projection)
{
	flashPlayer.setScreen(projection);
}
