//+==========================================================================================
//|  Copyright 2000 QEDSoft, Inc.
//|  All Rights Reserved.
//+==========================================================================================

var qed_v1=1;
var qed_v2=1;
var qed_v3=1;
var qed_v4=0;

var qed_pluginPathIE = "http://www.qedsoft.com/downloads/";
var qed_pluginPathNetscape = "http://www.qedsoft.com/downloads/";

var qed_onEndData			= "";
var qed_onStartData			= "";
var qed_onStartLoad			= "";
var qed_onEndLoad			= "";
var qed_onStart				= "";
var qed_onStop				= "";
var qed_onProgress			= "";
var qed_onStartBuffering	= "";
var qed_onStopBuffering		= "";
var qed_onMouseClicObject	= "";
var qed_onMouseEnterObject	= "";
var qed_onMouseExitObject	= "";
var qed_onMouseDownObject	= "";
var qed_onMouseUpObject		= "";
var qed_onStartAnim			= "";
var qed_onEndAnim			= "";
var qed_onError				= "";
var qed_onMouseMove			= "";
var qed_onKeyDown			= "";
var qed_onKeyPress			= "";
var qed_onKeyUp				= "";

var qed_language = "ENGLISH";

var bUpdatingNetscape = false;


//*******************************************************************************
//
//									EXECUTES
//
//*******************************************************************************

var QEDCurrCamId=65536;

//--------------------------------	3D PLAYER -----------------------------------

function QEDEXSetDebug(Player,DebugValue)
{
	Player.Execute("0 1 "+DebugValue);
}

function QEDEXSceneSetCurrentCamera(Player,CameraID)
{
	Player.Execute("0 2 "+CameraID);
}

function QEDEXSceneSetBackgroundColor(Player, r,g,b)
{
	Player.Execute("0 3 "+r+" "+g+" "+b);
}

function QEDEXSceneSetAmbientColor(Player, r,g,b)
{
	Player.Execute("0 4 "+r+" "+g+" "+b);
}

function QEDEXSceneForceFillMode(Player, value)		//	0 : Default(don't force), 1: Filled, 2 : WireFrame
{
	Player.Execute("0 5 "+value);
}

function QEDEXSceneForceShadingType(Player, value)	//	0 : Default(don't force), 1: Gouraud, 2 : Flat
{
	Player.Execute("0 6 "+value);
}

function QEDEXSceneSetPatchsQuality(Player, value)	//	-1 : Default, 0: Low, 1: Medium, 2 : High
{
	Player.Execute("0 7 "+value);
}

//--------------------------------	3D OBJECTS -----------------------------------

function QEDEXObject3DShow(Player,Object3DID,ShowValue)
{
	Player.Execute(Object3DID+" 301 "+ShowValue);
}

function QEDEXObject3DSetPosition(Player,Object3DID,x,y,z)
{
	Player.Execute(Object3DID+" 302 "+x+" "+y+" "+z);
}

function QEDEXObject3DAddPosition(Player,Object3DID,x,y,z)
{
	Player.Execute(Object3DID+" 303 "+x+" "+y+" "+z);
}

function QEDEXObject3DSetRotation(Player,Object3DID,x,y,z,cam)
{
	if (cam==null)
		cam=0;
	Player.Execute(Object3DID+" 304 "+x+" "+y+" "+z+" "+cam);
}

function QEDEXObject3DAddRotation(Player,Object3DID,x,y,z,cam)
{
	if (cam==null)
		cam=0;
	Player.Execute(Object3DID+" 305 "+x+" "+y+" "+z+" "+cam);
}

function QEDEXObject3DSetScale(Player,Object3DID,x,y,z)
{
	Player.Execute(Object3DID+" 306 "+x+" "+y+" "+z);
}

function QEDEXObject3DAddScale(Player,Object3DID,x,y,z)
{
	Player.Execute(Object3DID+" 307 "+x+" "+y+" "+z);
}

function QEDEXObject3DAnimNewPosition(Player,Object3DID, Loop)
{
	Player.Execute(Object3DID+" 308 "+Loop);
}

function QEDEXObject3DAnimAddKeyPosition(Player,Object3DID, Time,x,y,z)
{
	Player.Execute(Object3DID+" 309 "+Time+" "+x+" "+y+" "+z);
}

function QEDEXObject3DAnimAddCurKeyPosition(Player,Object3DID, Time)
{
	Player.Execute(Object3DID+" 315 "+Time);
}

function QEDEXObject3DAnimNewRotation(Player,Object3DID, Loop)
{
	Player.Execute(Object3DID+" 310 "+Loop);
}

function QEDEXObject3DAnimAddKeyRotationAdd(Player,Object3DID, Time,x,y,z,cam)
{
	if (cam==null)
		cam=0;
	Player.Execute(Object3DID+" 311 "+Time+" "+x+" "+y+" "+z+" "+cam);
}

function QEDEXObject3DAnimAddCurKeyRotationAdd(Player,Object3DID, Time)
{
	Player.Execute(Object3DID+" 316 "+Time);
}

function QEDEXObject3DAnimNewScale(Player,Object3DID, Loop)
{
	Player.Execute(Object3DID+" 312 "+Loop);
}

function QEDEXObject3DAnimAddKeyScale(Player,Object3DID, Time,x,y,z)
{
	Player.Execute(Object3DID+" 313 "+Time+" "+x+" "+y+" "+z);
}
function QEDEXObject3DAnimAddCurKeyScale(Player,Object3DID, Time)
{
	Player.Execute(Object3DID+" 317 "+Time);
}

function QEDEXObject3DSetTarget(Player,CameraIDorDirLightID,TargetObject3DID)		//	Meaningfull for Spot, Directional Light and Camera only
{
	Player.Execute(CameraIDorDirLightID+" 314 "+TargetObject3DID);
}

//--------------------------------	CAMERA -----------------------------------

function QEDEXCameraSetDegFOV(Player,CameraID,DegFOV)
{
	Player.Execute(CameraID+" 601 "+DegFOV);
}

function QEDEXCameraAddDegFOV(Player,CameraID,DegFOVToAdd)
{
	Player.Execute(CameraID+" 602 "+DegFOVToAdd);
}

//--------------------------------	LIGHT -----------------------------------

function QEDEXLightEnable(Player,LightID, EnableValue)
{
	Player.Execute(LightID+" 901 "+EnableValue);
}

function QEDEXLightSetColor(Player,LightID,r,g,b)
{
	Player.Execute(LightID+" 902 "+r+" "+g+" "+b);
}

function QEDEXLightSetIntensity(Player,LightID,IntensityValue)
{
	Player.Execute(LightID+" 903 "+IntensityValue);
}

function QEDEXLightAnimNewIntensity(Player,LightID, Loop)
{
	Player.Execute(LightID+" 904 "+Loop);
}

function QEDEXLightAnimAddKeyIntensity(Player,LightID, Time,IntensityValue)
{
	Player.Execute(LightID+" 905 "+Time+" "+IntensityValue);
}

function QEDEXLightAnimAddCurKeyIntensity(Player,LightID, Time)
{
	Player.Execute(LightID+" 906 "+Time);
}

//--------------------------------	MATERIAL -----------------------------------

function QEDEXMaterialSetAmbient(Player,MaterialID, r,g,b)
{
	Player.Execute(MaterialID+" 1201 "+r+" "+g+" "+b);
}

function QEDEXMaterialSetDiffuse(Player,MaterialID, r,g,b)
{
	Player.Execute(MaterialID+" 1202 "+r+" "+g+" "+b);
}

function QEDEXMaterialSetEmissive(Player,MaterialID, r,g,b)
{
	Player.Execute(MaterialID+" 1203 "+r+" "+g+" "+b);
}

function QEDEXMaterialSetSpecular(Player,MaterialID, r,g,b)
{
	Player.Execute(MaterialID+" 1204 "+r+" "+g+" "+b);
}

function QEDEXMaterialSetSpecularDensity(Player,MaterialID, SpecularDensity)
{
	Player.Execute(MaterialID+" 1205 "+SpecularDensity);
}

function QEDEXMaterialSetTransparency(Player,MaterialID, TransparencyValue)	//	Transparency value (0.0 : Opaque ... 1.0 : Transparent)
{
	Player.Execute(MaterialID+" 1206 "+TransparencyValue);
}

function QEDEXMaterialAnimNewTransparency(Player,MaterialID, Loop)
{
	Player.Execute(MaterialID+" 1207 "+Loop);
}

function QEDEXMaterialAnimAddKeyTransparency(Player,MaterialID, Time,TransparencyValue)
{
	Player.Execute(MaterialID+" 1208 "+Time+" "+TransparencyValue);
}

function QEDEXMaterialAnimAddCurKeyTransparency(Player,MaterialID, Time)
{
	Player.Execute(MaterialID+" 1212 "+Time);
}

function QEDEXMaterialSetSpecularLevel(Player,MaterialID, Level)		//	Multiplier between 0.0 & 10.0
{
	Player.Execute(MaterialID+" 1209 "+Level);
}

function QEDEXMaterialSetFillMode(Player,MaterialID, FillMode)
{
	Player.Execute(MaterialID+" 1211 "+FillMode);						//	0 : Filled, 1 : WireFrame
}


function QEDEXMaterialSetShadingType(Player,MaterialID, ShadingType)
{	
	Player.Execute(MaterialID+" 1210 "+ShadingType);					//	0 : Gouraud, 1 : Flat
}

//--------------------------------	SHAPE -----------------------------------

function QEDEXShapeSetPercent(Player,ShapeID, PercentValue)
{
	Player.Execute(ShapeID+" 1501 "+ PercentValue);
}
function QEDEXShapeAddPercent(Player,ShapeID, PercentValue)
{
	Player.Execute(ShapeID+" 1502 "+ PercentValue);
}

function QEDEXShapeAnimNewPercent(Player,ShapeID, Loop)
{
	Player.Execute(ShapeID+" 1503 "+Loop);
}

function QEDEXShapeAnimKeyPercent(Player,ShapeID, Time,PercentValue)
{
	Player.Execute(ShapeID+" 1504 "+Time+" "+ PercentValue);
}

function QEDEXShapeAnimCurKeyPercent(Player,ShapeID, Time)
{
	Player.Execute(ShapeID+" 1505 "+Time);
}

//--------------------------------	TEXTURE -----------------------------------

function QEDEXTextureSetOffset(Player,TextureID, x,y)
{
	Player.Execute(TextureID+" 1801 "+x+" "+y);
}

function QEDEXTextureAddOffset(Player,TextureID, x,y)
{
	Player.Execute(TextureID+" 1804 "+x+" "+y);
}

function QEDEXTextureAnimNewOffset(Player,TextureID, Loop)
{
	Player.Execute(TextureID+" 1802 "+Loop);
}

function QEDEXTextureAnimAddKeyOffset(Player,TextureID, Time,x,y)
{
	Player.Execute(TextureID+" 1803 "+Time+" "+x+" "+y);
}

function QEDEXTextureAnimAddCurKeyOffset(Player,TextureID, Time)
{
	Player.Execute(TextureID+" 1805 "+Time);
}

//--------------------------------	STREAM PLAYER -----------------------------------

function QEDEXBeginBloc(Player)
{
	Player.Execute("RS 2101");
}

function QEDEXEndBloc(Player)
{
	Player.Execute("RS 2102");
}

function QEDEXStart(Player)
{
	Player.Execute("RS 2109");
}

function QEDEXStop(Player)
{
	Player.Execute("RS 2110");
}

//arrow==0;hand==1
function QEDEXSetCursor(Player,cursorid)
{
	Player.Execute("RS 2111 "+cursorid);
}


function QEDEXSetStream(Player,url)
{
	Player.Execute("RS 2112 "+url);	
}

function QEDEXAddStream(Player,url)
{
	Player.Execute("RS 2113 "+url);	
}

function QEDEXPreloadStream(Player,url)
{
	Player.Execute("RS 2114 "+url);	
}

function QEDEXSetStreamEx(Player,url,id,loop,merge)
{
	Player.Execute("RS 2112 "+url+" "+id+" "+loop+" "+merge);	
}

function QEDEXAddStreamEx(Player,url,id,loop,merge)
{
	Player.Execute("RS 2113 "+url+" "+id+" "+loop+" "+merge);	
}

function QEDEXPreloadStreamEx(Player,url,id,loop,merge)
{
	Player.Execute("RS 2114 "+url+" "+id+" "+loop+" "+merge);	
}

//	CALLBACKS
	//	MOUSE EVENTS CALLBACKS

function QEDEXSetCallBkOnMouseClicObject(Player,funcname)
{
	Player.Execute("RS 2105 1 "+funcname);	
}
function QEDEXSetCallBkOnMouseDownObject(Player,funcname)
{
	Player.Execute("RS 2105 2 "+funcname);	
}
function QEDEXSetCallBkOnMouseUpObject(Player,funcname)
{
	Player.Execute("RS 2105 3 "+funcname);	
}
function QEDEXSetCallBkOnMouseEnterObject(Player,funcname)
{
	Player.Execute("RS 2105 4 "+funcname);	
}
function QEDEXSetCallBkOnMouseExitObject(Player,funcname)
{
	Player.Execute("RS 2105 5 "+funcname);	
}

function QEDEXSetCallBkOnMouseMove(Player,funcname)
{
	Player.Execute("RS 2105 15 "+funcname);	
}
//KEY EVENT
function QEDEXSetCallBkOnKeyDown(Player,funcname)
{
	Player.Execute("RS 2105 16 "+funcname);	
}
function QEDEXSetCallBkOnKeyUp(Player,funcname)
{
	Player.Execute("RS 2105 17 "+funcname);	
}
function QEDEXSetCallBkOnKeyPress(Player,funcname)
{
	Player.Execute("RS 2105 18 "+funcname);	
}

	//	STREAM EVENTS CALLBACKS

function QEDEXSetCallBkOnStartData(Player,funcname)
{
	Player.Execute("RS 2105 6 "+funcname);	
}
function QEDEXSetCallBkOnEndData(Player,funcname)
{
	Player.Execute("RS 2105 7 "+funcname);	
}
function QEDEXSetCallBkOnStartAnim(Player,funcname)
{
	Player.Execute("RS 2105 8 "+funcname);	
}
function QEDEXSetCallBkOnEndAnim(Player,funcname)
{
	Player.Execute("RS 2105 9 "+funcname);	
}
function QEDEXSetCallBkOnError(Player,funcname)
{
	Player.Execute("RS 2105 10 "+funcname);	
}


function QEDEXSetCallBkOnDebug(Player,funcname)
{
	Player.Execute("RS 2105 11 "+funcname);	
}

function QEDEXSetCallBkOnStartLoad(Player,funcname)
{
	Player.Execute("RS 2105 12 "+funcname);	
}
function QEDEXSetCallBkOnEndLoad(Player,funcname)
{
	Player.Execute("RS 2105 13 "+funcname);	
}

function QEDEXSetCallBkOnLoadProgress(Player,funcname)
{
	Player.Execute("RS 2105 14 "+funcname);	
}

//

function QEDEXOnBrowserLoaded(Player)
{
	Player.Execute("RS 2106");	
}


//--------------------------------	MESH -----------------------------------

function QEDEXMeshSetTexture(Player,MeshID,SubObjectID, TextureID)
{
	Player.Execute(MeshID+" 2401 "+SubObjectID+" "+ TextureID);
}


function QEDEXMeshMouseEventGhost(Player,MeshID,SubObjectID, val)
{
	Player.Execute(MeshID+" 2402 "+SubObjectID+" "+ val);
}

// for action: 0==none 1==callback 2==function (funcname if action==2 else "")
function QEDEXMeshMouseEventSetEnter(Player,MeshID,SubObjectID, action,funcname)
{
	Player.Execute(MeshID+" 2403 "+SubObjectID+" "+ action +" "+funcname);
}

function QEDEXMeshMouseEventSetLeave(Player,MeshID,SubObjectID, action,funcname)
{
	Player.Execute(MeshID+" 2404 "+SubObjectID+" "+ action +" "+funcname);
}

function QEDEXMeshMouseEventSetClic(Player,MeshID,SubObjectID, action,funcname)
{
	Player.Execute(MeshID+" 2405 "+SubObjectID+" "+ action +" "+funcname);
}

function QEDEXMeshMouseEventSetDown(Player,MeshID,SubObjectID, action,funcname)
{
	Player.Execute(MeshID+" 2406 "+SubObjectID+" "+ action +" "+funcname);
}

function QEDEXMeshMouseEventSetUp(Player,MeshID,SubObjectID, action,funcname)
{
	Player.Execute(MeshID+" 2407 "+SubObjectID+" "+ action +" "+funcname);
}

//--------------------------------	PATCHS -----------------------------------

function QEDEXPatchSetQuality(Player,PatchID, value)	//	0: Low, 1: Medium, 2 : High
{
	Player.Execute(PatchID+" 2501 "+value);
}

//*******************************************************************************
//
//									REQUESTS
//
//*******************************************************************************

function QEDGetSubString(string,num)
{
	compteur=0;
	while (compteur < num) 
	{
		compteur++;
		string=string.substring(string.indexOf(':')+1);
	}
	return string;
}

//--------------------------------	3D PLAYER -----------------------------------

function QEDRQSceneTime(Player)
{
	req = Player.Request('0 1501');
	return parseFloat(QEDGetSubString(req,1));
}

function QEDRQSceneBackgroundColor(Player)
{
	ret = new Array();
 
	req = Player.Request('0 1503');

	ret[0] = parseFloat(QEDGetSubString(req,1));
	ret[1] = parseFloat(QEDGetSubString(req,2));
	ret[2] = parseFloat(QEDGetSubString(req,3));

	return ret;
}

function QEDRQSceneCurrentCamera(Player)
{
	req = Player.Request('0 1504');
	return parseFloat(QEDGetSubString(req,1));
}

function QEDRQVersion(Player)
{
	req = Player.Request('0 1505');

	ret = QEDGetSubString(req,1).substring(0,7);

	if (ret!="VERSION")
		return "0.0.0.0";

	return QEDGetSubString(req,2);
}

function QEDRQSceneGetPatchsQuality(Player)	//return	-1 : Default, 0: Low, 1: Medium, 2 : High
{
	req = Player.Request('0 1506');
	return parseInt(QEDGetSubString(req,1));
}


//--------------------------------	3D OBJECTS -----------------------------------

function QEDRQObject3DPosition(Player,Object3D)
{
	ret = new Array();
 
	req = Player.Request(Object3D+' 302');

	ret[0] = parseFloat(QEDGetSubString(req,1));
	ret[1] = parseFloat(QEDGetSubString(req,2));
	ret[2] = parseFloat(QEDGetSubString(req,3));

	return ret;
}

function QEDRQObject3DRotation(Player,Object3D)
{
	ret = new Array();

	req = Player.Request(Object3D+' 303');

	ret[0] = parseFloat(QEDGetSubString(req,1));
	ret[1] = parseFloat(QEDGetSubString(req,2));
	ret[2] = parseFloat(QEDGetSubString(req,3));

	return ret;
}

function QEDRQObject3DScale(Player,Object3D)
{
	ret = new Array();
 
	req = Player.Request(Object3D+' 304');

	ret[0] = parseFloat(QEDGetSubString(req,1));
	ret[1] = parseFloat(QEDGetSubString(req,2));
	ret[2] = parseFloat(QEDGetSubString(req,3));

	return ret;
}

function QEDRQObject3DShow(Player,Object3D)
{
	req = Player.Request(Object3D +' 301');
	return parseFloat(QEDGetSubString(req,1));
}


function QEDRQObject3DTarget(Player,Object3D)	//	Meaningfull for Spot, Directional Light and Camera only
{
	req = Player.Request(Object3D+' 305');

	return parseFloat(QEDGetSubString(req,1));
}

function QEDRQObject3DPositionGlobal(Player,Object3D)
{
	ret = new Array();
 
	req = Player.Request(Object3D+' 306');

	ret[0] = parseFloat(QEDGetSubString(req,1));
	ret[1] = parseFloat(QEDGetSubString(req,2));
	ret[2] = parseFloat(QEDGetSubString(req,3));

	return ret;
}

//--------------------------------	CAMERA -----------------------------------

function QEDRQCameraDegFOV(Player,CameraID)
{
	req = Player.Request(CameraID+' 601');
	return parseFloat(QEDGetSubString(req,1));
}

//--------------------------------	LIGHT -----------------------------------

function QEDRQLightColor(Player,LightID)
{
	ret = new Array();
 
	req = Player.Request(LightID+' 901');

	ret[0] = parseFloat(QEDGetSubString(req,1));
	ret[1] = parseFloat(QEDGetSubString(req,2));
	ret[2] = parseFloat(QEDGetSubString(req,3));

	return ret;
}

function QEDRQLightEnable(Player,LightID)
{
	req = Player.Request(LightID +' 902');
	return parseFloat(QEDGetSubString(req,1));
}

function QEDRQLightIntensity(Player,LightID)
{
	req = Player.Request(LightID +' 903');
	return parseFloat(QEDGetSubString(req,1));
}

//--------------------------------	MATERIAL -----------------------------------

function QEDRQMaterialTransparency(Player,MaterialID)
{
	req = Player.Request(MaterialID+' 1206');
	return parseFloat(QEDGetSubString(req,1));
}

function QEDRQMaterialAmbient(Player,MaterialID)
{
	ret = new Array();
 
	req = Player.Request(MaterialID+' 1201');

	ret[0] = parseFloat(QEDGetSubString(req,1));
	ret[1] = parseFloat(QEDGetSubString(req,2));
	ret[2] = parseFloat(QEDGetSubString(req,3));

	return ret;
}
function QEDRQMaterialDiffuse(Player,MaterialID)
{
	ret = new Array();
 
	req = Player.Request(MaterialID+' 1202');

	ret[0] = parseFloat(QEDGetSubString(req,1));
	ret[1] = parseFloat(QEDGetSubString(req,2));
	ret[2] = parseFloat(QEDGetSubString(req,3));

	return ret;
}

function QEDRQMaterialEmissive(Player,MaterialID)
{
	ret = new Array();
 
	req = Player.Request(MaterialID+' 1203');

	ret[0] = parseFloat(QEDGetSubString(req,1));
	ret[1] = parseFloat(QEDGetSubString(req,2));
	ret[2] = parseFloat(QEDGetSubString(req,3));

	return ret;
}

function QEDRQMaterialSpecular(Player,MaterialID)
{
	ret = new Array();
 
	req = Player.Request(MaterialID+' 1204');

	ret[0] = parseFloat(QEDGetSubString(req,1));
	ret[1] = parseFloat(QEDGetSubString(req,2));
	ret[2] = parseFloat(QEDGetSubString(req,3));

	return ret;
}

function QEDRQMaterialPower(Player,MaterialID)
{
	req = Player.Request(MaterialID+' 1205');
	return parseFloat(QEDGetSubString(req,1));
}

//--------------------------------	SHAPE -----------------------------------

function QEDRQShapePercent(Player,ShapeID)
{
	req = Player.Request(ShapeID+' 2401');
	return parseFloat(QEDGetSubString(req,1));
}

//--------------------------------	TEXTURE -----------------------------------

function QEDRQTextureOffset(Player,TextureID)
{
	ret = new Array();
 
	req = Player.Request(TextureID+' 2101');

	ret[0] = parseFloat(QEDGetSubString(req,1));
	ret[1] = parseFloat(QEDGetSubString(req,2));

	return ret;
}

//--------------------------------	MESH -----------------------------------

function QEDRQMeshTexture(Player,MeshID,SubObjectID)
{
	req = Player.Request(MeshID+' 2701 '+SubObjectID);

	return parseFloat(QEDGetSubString(req,1));
}

//--------------------------------	PATCHS -----------------------------------

function QEDRQPatchGetQuality(Player,PatchID) //return 	0: Low, 1: Medium, 2 : High
{
	req = Player.Request(PatchID+' 2801');
	return parseInt(QEDGetSubString(req,1));
}

//----------------------------------------------------------------------------

function QED_onBrowserResized()
{
    var isNN = (navigator.appName.indexOf("Netscape") != -1);
    var agt = navigator.userAgent.toLowerCase();
    var isMac = agt.indexOf('mac') != -1;

    if (isMac && isNN)
        history.go(0);
}

function QED_mySetStream(player,filename)
{
	s1 = QED_GenerateURL(filename);
	QEDEXSetStream(player,s1);
}

function QED_myAddStream(player,filename)
{
	s1 = QED_GenerateURL(filename);
	QEDEXAddStream(player,s1);
}

function QED_myPreloadStream(player,filename)
{
	s1 = QED_GenerateURL(filename);
	QEDEXPreloadStream(player,s1);
}

function QED_mySetStreamEx(player,filename,id,loop,merge)
{
	s1 = QED_GenerateURL(filename);
	QEDEXSetStreamEx(player,s1,id,loop,merge);
}

function QED_myAddStreamEx(player,filename,id,loop,merge)
{
	s1 = QED_GenerateURL(filename);
	QEDEXAddStreamEx(player,s1,id,loop,merge);
}

function QED_myPreloadStreamEx(player,filename,id,loop,merge)
{
	s1 = QED_GenerateURL(filename);
	QEDEXPreloadStreamEx(player,s1,id,loop,merge);
}

function QED_check(silent)
{
	if (navigator.appName == "Netscape") // 4.5 min
	{
		var ver = navigator.appVersion.substring(0,1);
		if (ver<4)
		{
			if (silent<=0)
				alert("QEDPlayer needs Netscape Navigator 4.5 or later (not 6.x).");
			return false;
		}
		else if (ver==4)
		{
			if (navigator.appVersion.substring(2,3)<5)
			{
				if (silent<=0)
					alert("QEDPlayer needs Netscape Navigator 4.5 or later (not 6.x).");
				return false;
			}
		}
		else if (ver>4)
		{
			if (silent<=0)
				alert("QEDPlayer needs Netscape Navigator 4.5 or later (not 6.x).");
			return false;
		}
	}
	else if (navigator.appName == "Microsoft Internet Explorer") // 4.01 min
	{
		var version = navigator.appVersion;
		var i = version.indexOf('MSIE');
		if (i<0)
		{
			if (silent<=0)
				alert("QEDPlayer needs Microsoft Internet Explorer 4.01 or later.");
			return false;
		}
		var major = version.substring(i+5,i+6);
		var minor = version.substring(i+7,i+9);
		if (major<4)
		{
			if (silent<=0)
				alert("QEDPlayer needs Microsoft Internet Explorer 4.01 or later.");
			return false;
		}
		else if (major==4)
		{
			if (minor<1)
			{
				if (silent<=0)
					alert("QEDPlayer needs Microsoft Internet Explorer 4.01 or later.");
				return false;
			}
		}
	}
	else // unknown navigator
	{
		if (silent<=0)
			alert("QEDPlayer needs either Netscape Navigator or Microsoft Internet Explorer.");
		return false; 
	}

	if (navigator.appName == "Microsoft Internet Explorer" && (navigator.platform == "MacPPC" || navigator.platform == "Mac68k")) 
	{
		if (silent<=0)
			alert("QEDPlayer doesn't runs on Microsoft Internet Explorer for Macintosh.\nTry on Netscape Navigator 4.5 or later (not 6.x).");
		return false;
	}

	if (navigator.platform != "Win32" && navigator.platform != "MacPPC")
	{
		if (silent<=0)
			alert("QEDPlayer runs on Macintosh PPC MacOS 9 or later, and on Microsoft Windows 95 or later.\nnavigator.platform = " + navigator.platform);
		return false;
	}

	if (!navigator.javaEnabled() )
	{
		if (silent<=0)
			alert("QEDPlayer needs java to be enabled in your browser.");
		return false;
	}

	return true;
}

function QED_Installation()
{
	if (navigator.appName == "Netscape")
	{
		var trigger = netscape.softupdate.Trigger;
		if ( trigger.UpdateEnabled() )
		{
			var vi = new netscape.softupdate.VersionInfo(qed_v1, qed_v2, qed_v3, qed_v4);
			var jarNameFile = "";
			if (navigator.platform == "Win32")
				jarNameFile = "qedstreamplayer.jar";
			if (navigator.platform == "MacPPC")
				jarNameFile = "qedplayermac.jar";
				
			bUpdatingNetscape = trigger.ConditionalSoftwareUpdate(qed_pluginPathNetscape+jarNameFile,"plugins/qedsoft/QEDStreamPI",vi,trigger.DEFAULT_MODE);
		}
		else
		{
			alert("SmartUpdate is not enabled; enable it and try again.");
		}
	}
}

function ___reloadTimer()
{
		var trigger = netscape.softupdate.Trigger;
		if (trigger.CompareVersion("plugins/qedsoft/QEDStreamPI",qed_v1, qed_v2, qed_v3, qed_v4)>=0)
		{	
			document.location.reload();
		}
		else
			setTimeout("___reloadTimer()",1000);
}

function ___createQEDTag(name,stream1,stream2,width,height,mode,posx,posy)
{
	if (mode=="TRANSPARENT")
	{
		widthIE  = 1;
		heightIE = 1;
		widthNS  = 2;
		heightNS = 2;

		width3D  = width;
		height3D = height;

		if (posx==null)
			posx=0;
		if (posy==null)
			posy=0;

	}
	else
	{
		widthIE  = width;
		heightIE = height;
		widthNS  = width;
		heightNS = height;

		width3D = null;
		height3D = null;
	}

	var output = '<OBJECT'+
	             ' WIDTH='+widthIE+
				 ' HEIGHT='+heightIE+
				 ' ID="'+name+'"'+
				 ' CLASSID="CLSID:F33BE3CD-C9E1-11D4-BDB0-004854669880"'+
				 ' CODEBASE="'+qed_pluginPathIE+'QEDPlayer.cab#Version='+qed_v1+','+qed_v2+','+qed_v3+','+qed_v4+'"'+
				 ' STANDBY="Initializing the QEDPlayer. Please Wait...">'+
				 ' <param name="LANGUAGE" value="'+qed_language+'">'+
				 ' <param name="STREAMURL1" value="'+stream1+'">'+
				 ' <param name="STREAMURL2" value="'+stream2+'">'+
				 ' <param name="MODE" value="'+mode+'">'+
				 ' <param name="ONENDDATA" value="'+qed_onEndData+'">'+
				 ' <param name="ONSTARTDATA" value="'+qed_onStartData+'">'+
				 ' <param name="ONSTARTLOAD" value="'+qed_onStartLoad+'">'+
				 ' <param name="ONENDLOAD" value="'+qed_onEndLoad+'">'+
				 ' <param name="ONSTART" value="'+qed_onStart+'">'+
				 ' <param name="ONSTOP" value="'+qed_onStop+'">'+
				 ' <param name="ONLOADPROGRESS" value="'+qed_onProgress+'">'+
				 ' <param name="ONSTARTBUFFERING" value="'+qed_onStartBuffering+'">'+
				 ' <param name="ONSTOPBUFFERING" value="'+qed_onStopBuffering+'">'+
				 ' <param name="ONMOUSECLICOBJECT" value="'+qed_onMouseClicObject+'">'+
				 ' <param name="ONMOUSEENTEROBJECT" value="'+qed_onMouseEnterObject+'">'+
				 ' <param name="ONMOUSEEXITOBJECT" value="'+qed_onMouseExitObject+'">'+
				 ' <param name="ONMOUSEDOWNOBJECT" value="'+qed_onMouseDownObject+'">'+
				 ' <param name="ONMOUSEUPOBJECT" value="'+qed_onMouseUpObject+'">'+
				 ' <param name="ONSTARTANIM" value="'+qed_onStartAnim+'">'+
				 ' <param name="ONENDANIM" value="'+qed_onEndAnim+'">'+		 
				 ' <param name="ONERROR" value="'+qed_onError+'">'+
				 ' <param name="ONMOUSEMOVE" value="'+qed_onMouseMove+'">'+
				 ' <param name="ONKEYDOWN" value="'+qed_onKeyDown+'">'+
				 ' <param name="ONKEYPRESSED" value="'+qed_onKeyPress+'">'+
				 ' <param name="ONKEYUP" value="'+qed_onKeyUp+'">';


	if (width3D!=null)
		output +=' <param name="WIDTH3D" value="'+width3D+'">';

	if (height3D!=null)
		output +=' <param name="HEIGHT3D" value="'+height3D+'">';

	if (posx!=null)
		output +=' <param name="POSX" value="'+posx+'">';

	if (posy!=null)
		output +=' <param name="POSY" value="'+posy+'">';

	output +=		'<EMBED STREAMURL1="'+stream1+'"'+
					 ' STREAMURL2="'+stream2+'"'+
					 ' TYPE="application/x-qedstream"'+
					 ' WIDTH='+widthNS+
					 ' HEIGHT='+heightNS+
					 ' MODE="'+mode+'"'+
					 ' NAME="'+name+'"'+
					 ' LANGUAGE="'+qed_language+'"'+
					 ' ONENDDATA="'+qed_onEndData+'"'+
					 ' ONSTARTDATA="'+qed_onStartData+'"'+
					 ' ONSTARTLOAD="'+qed_onStartLoad+'"'+
					 ' ONENDLOAD="'+qed_onEndLoad+'"'+
					 ' ONSTART="'+qed_onStart+'"'+
					 ' ONSTOP="'+qed_onStop+'"'+
					 ' ONLOADPROGRESS="'+qed_onProgress+'"'+
					 ' ONSTARTBUFFERING="'+qed_onStartBuffering+'"'+
					 ' ONSTOPBUFFERING="'+qed_onStopBuffering+'"'+
					 ' ONMOUSECLICOBJECT="'+qed_onMouseClicObject+'"'+
					 ' ONMOUSEENTEROBJECT="'+qed_onMouseEnterObject+'"'+
					 ' ONMOUSEEXITOBJECT="'+qed_onMouseExitObject+'"'+
					 ' ONMOUSEDOWNOBJECT="'+qed_onMouseDownObject+'"'+
					 ' ONMOUSEUPOBJECT="'+qed_onMouseUpObject+'"'+
					 ' ONSTARTANIM="'+qed_onStartAnim+'"'+
					 ' ONENDANIM="'+qed_onEndAnim+'"'+
					 ' ONERROR="'+qed_onError+'"'+
					 ' ONMOUSEMOVE="'+qed_onMouseMove+'"'+
					 ' ONKEYDOWN="'+qed_onKeyDown+'"'+
					 ' ONKEYPRESSED="'+qed_onKeyPress+'"'+
				     ' ONKEYUP="'+qed_onKeyUp+'"';

	if (width3D!=null)
		output +=	  ' WIDTH3D='+width3D;

	if (height3D!=null)
		output +=	  ' HEIGHT3D='+height3D;

	if (posx!=null)
		output +=	  ' POSX='+posx;

	if (posy!=null)
		output +=	  ' POSY='+posy;
		
	// Mac Only (privates properties)
	if (navigator.platform == "MacPPC")
	{
		if (navigator.appName == "Netscape") // Netscape Only
		{
			if (self!=null)
			{
				output +=	  ' POSXMAC='+(self.outerWidth - self.innerWidth - 13);
				output +=	  ' POSYMAC='+(self.outerHeight - self.innerHeight - 45);
				output +=	  ' WIDTHMAC='+self.innerWidth;
				output +=	  ' HEIGHTMAC='+self.innerHeight;
			}
		}
	}

	output +=		 '><\/EMBED>'+
				' <\/OBJECT>';

	return output;
}

function QED_createFull3DURL(name,stream1,stream2,width,height)
{
	if (!QED_check(0))
		return;

	QED_Installation();

	if (!bUpdatingNetscape)
	{
		var output = ___createQEDTag(name,stream1,stream2,width,height,"NORMAL");

		document.write(output);
	}
	else
	{
		setTimeout("___reloadTimer()",1000);
	}
}

function QED_createTransparentURL(name,stream1,stream2,width3D,height3D,posx,posy)
{
	if (!QED_check(0))
		return;

	QED_Installation();

	if (!bUpdatingNetscape)
	{
		var output = ___createQEDTag(name,stream1,stream2,width3D,height3D,"TRANSPARENT",posx,posy);

		document.write(output);
	}
	else
	{
		setTimeout("___reloadTimer()",1000);
	}

}


function QED_GetCurrentdocUrl()
{
	currentdoc = document.location.href;
	currentdoc.replace(" ","%20");
	idx = currentdoc.length-1;
	while ((currentdoc.substr(idx,1)!='\\') && (currentdoc.substr(idx,1)!='/')) 
	{
		idx--;
	}

	return currentdoc.substr(0,idx+1);
}

function QED_GenerateURL(str)
{
	if (str=="") return str;

	curpath = QED_GetCurrentdocUrl();

	res     = "";
	
	if (str.substr(0,1)=='/') 
	{
		// same protocol but root
		idx=0;
		if (curpath.substr(0,7)=="file://") 
		{
		 alert("Absolute path ["+str+"] is forbidden with file:// protocol!");
		 return str;
		}
		if (curpath.substr(0,7)=="http://") idx=7;
		res = curpath.substr(0,idx);
		while (curpath.substr(idx,1)!='/') 
		{
			res+=curpath.substr(idx,1);
			idx++;
		}
		res+=str;
	}
	else if (str.substr(0,7)=='http://') 
	{
		res = str;
	}
	else if (str.substr(0,7)=='file://') 
	{
		res = str;
	}
	else
		res = curpath+str;

	res2 = res.replace(/\s/g,"%20");

	return res2;
}

function QED_createFull3D(name,stream1,stream2,width,height)
{
	s1 = QED_GenerateURL(stream1);
	s2 = QED_GenerateURL(stream2);
	QED_createFull3DURL(name,s1,s2,width,height);
}

function QED_createTransparent(name,stream1,stream2,width3D,height3D,posx,posy)
{
	s1 = QED_GenerateURL(stream1);
	s2 = QED_GenerateURL(stream2);
	QED_createTransparentURL(name,s1,s2,width3D,height3D,posx,posy);
}
