> I think that could be pretty useful, especially once VRML browsers let
> you associate presentation styles with element types. After all,
> rendering 3-D objects is not fundamentally different in the abstract
> from rendering 2-D objects, it's still a matter of apply presentation
> style.  So why shouldn't XSL be just as useful for VRML worlds as for
> 2-D documents?
While it is possible to write a declarative architecture 
for the static nodes (eg VRML 1.0), it is a very 
different beast from a real time simulation 
language.    As to associating XSL, how useful is 
it to associate a style language with a presentation 
language that already includes all of the presentation 
information required.
VRML 2.0 is a real time simulation language.  The 
event model is very interesting.  It includes  
events, exposed fields, addChildren, etc. as 
part of the language.  The test is to see if 
XML, DOM, DHTML adds anything useful.
If others from the XML community are interested 
in this project, it will be conducted on an open list.
Here is a simple VRML 2.0 file so you can discover what 
it looks like.  Be aware that a VRML instance has 
a lot of assumed parts for information that the 
browser must explicitly support but which are not 
in the instance itself (eg, addChildren).  VRML 2.0 
was designed for a very efficient syntax.
len
#VRML V2.0 utf8
WorldInfo {
	title "Opening Animation"
	info [
	]
}
DEF FirstNav NavigationInfo {
	type ["NONE" ]
	headlight FALSE
}
Background{
	skyColor 0 0 0
	frontUrl["../galaxy/stars.jpg"]
	backUrl ["../galaxy/stars.jpg"]
	rightUrl ["../galaxy/stars.jpg"]
	leftUrl ["../galaxy/stars.jpg"]
	topUrl ["../galaxy/stars.jpg"]
	bottomUrl ["../galaxy/stars.jpg"]
	}
DEF ZoomView Transform {
	translation 0 0 500
	rotation 0 0 1 0
	children [
		DEF StartView Viewpoint{
			position 0 0 0
			orientation 0 0 1 0
			fieldOfView 0.7
			description "Travelling"
			jump TRUE
		}
	]
}
DEF Title Transform {
	translation 0 0 130 #0 0 140
	scale 1 1 1 
	children [
#					DEF TitleTouch TouchSensor {}
					Shape{
						appearance Appearance{
							material Material{ }
							texture ImageTexture{
								url [
									"textures/title_1.gif"]
								repeatS FALSE
								repeatT FALSE
							}
							textureTransform TextureTransform {
								translation 0.01 0.01
								scale 0.97 0.97
							}	
						}
						geometry IndexedFaceSet{
							coord Coordinate{
								point[ -250 -118 -40,
										0 -118 -40,
										0 125 -40,
										-250 125 -40]
								} #end coord
							coordIndex[ 0, 1, 2, 3]
							texCoord TextureCoordinate {
								point [ -0.01 -0.01, 1.01 -0.01,
									 1.01 1.01, -0.01 1.01 ]
								}
							texCoordIndex [ 0, 1, 2, 3]
						} #end geometry
					}, #end shape
					Shape{
						appearance Appearance{
							material Material { }
							texture ImageTexture{
								url [
									"textures/title_2.gif"]
								repeatS FALSE
								repeatT FALSE
							}
							textureTransform TextureTransform {
								translation 0.01 0.01
								scale 0.98 0.98
							}	
						}
						geometry IndexedFaceSet{
							coord Coordinate{
								point [ 0 -118 -40,
										250 -118 -40,
										250 125 -40,
										0 125 -40]
								} #end coord
							coordIndex[ 0, 1, 2, 3]
							texCoord TextureCoordinate {
								point [ -0.01 -0.01, 1.01 -0.01,
									 1.01 1.01, -0.01 1.01 ]
								point [ 0 0, 1 0, 1 1, 0 1 ]
								}
							texCoordIndex [ 0, 1, 2, 3]
						} #end geometry
					} #end shape
			] #end Children
} #end Transform
DEF Title_PI PositionInterpolator {
	key [ 0,  0.25, 0.5, 0.75, 1 ]
	keyValue [ 0 0 130, 0 0 180, 0 0 300, 0 0 100000, 0 0 200000 ]
}
DEF Corona Transform{
	children Billboard {
		axisOfRotation 0 0 0
		children [
					DEF FirstLight Transform{
						children [
							PointLight{
								ambientIntensity 1
								intensity 0.9
								radius 220
								}
							]
						rotation 0 0 -1 0
						translation 0 0 200
					},
					DEF AnotherLight Transform{
						children [
							PointLight{
								ambientIntensity 1
								intensity 0.4
								radius 710
								}
							]
						rotation 0 0 -1 0
						translation 0 0 700
					},
					DEF DirectSun Group {
					children [
							DirectionalLight {
								direction 0 0 1
								intensity 0.9
							}
						]
					},
					Shape{
						appearance Appearance{
							material Material{
							}
							texture ImageTexture{
								url [
									"textures/corona_l.gif"]
								repeatS FALSE
								repeatT FALSE
							}
						}
						geometry IndexedFaceSet{
							creaseAngle 1
							coord Coordinate{
								point[ -249 -118 -40,
										3 -118 -40,
										3 128 -40,
										-249 128 -40]
								} #end coord
							coordIndex[ 0, 1, 2, 3]
							texCoord TextureCoordinate {
								point [ -0.01 -0.01, 1.01 -0.01,
									 1.01 1.01, -0.01 1.01 ]
								}
							texCoordIndex [ 0, 1, 2, 3]
						} #end geometry
					}, #end shape
					Shape{
						appearance Appearance{
							material Material{
							}
							texture ImageTexture{
								url [
									"textures/corona_r.gif"]
								repeatS FALSE
								repeatT FALSE
							}
	
						}
						geometry IndexedFaceSet{
							creaseAngle 1
							coord Coordinate{
								point [ -3 -118 -40,
										250 -118 -40,
										250 127 -40,
										-3 127 -40]
								} #end coord
							coordIndex[ 0, 1, 2, 3]
							texCoord TextureCoordinate {
								point [ -0.01 -0.01, 1.01 -0.01,
									 1.01 1.01, -0.01 1.01 ]
								point [ 0 0, 1 0, 1 1, 0 1 ]
								}
							texCoordIndex [ 0, 1, 2, 3]
						} #end geometry
					} #end shape
		] # end billboard children
	} # end billboard
} # end Corona transform
DEF TheSpheres Transform {
	children [
		DEF Core Transform {
			children [
				Shape {
					appearance Appearance{
						material Material {
							diffuseColor 1 1 1
							emissiveColor 1 1 1
						}
					}
					geometry Sphere{
						radius 65
					}
				}
			]
		},
		DEF Inner Transform{
			children [
				Shape{
					appearance Appearance{
						material Material{
							diffuseColor 1 1 1
							emissiveColor 0.5 0.4 0.2 #0.7 0.6 0.4
							ambientIntensity 1
							transparency 0.3
							shininess 1
						}
						texture ImageTexture{
							url [
								"textures/sol_1.gif"]
						}
					}
					geometry Sphere{
						radius 69.5
					}
				}
			]
			rotation 0 1 0 0			
		},
		DEF Outer Transform{
			children [
				Shape{
					appearance Appearance{
						material DEF Shell Material{
							diffuseColor 1 1 1
							emissiveColor 0.7 0.6 0.4 #0.9 0.8 0.6
							ambientIntensity 1
							shininess 0
							transparency 0.75
						}
						texture ImageTexture{
							url [
								"textures/sol_2.gif"]
						}
					}
					geometry Sphere{
						radius 80
					}
				}
			]
			rotation 0 1 0 0			
		},
		DEF Flares Transform{
			children [
				Shape{
					appearance Appearance{
						material DEF FlaresT Material{
							diffuseColor 1 1 1
							emissiveColor 0.5 0.4 0.25 #0.7 0.6 0.5
							ambientIntensity 1
							shininess 0.2
							transparency 0
						}
						texture ImageTexture{
							url [
								"textures/sol_3.gif"]
						}
					}
					geometry DEF FlareSphere Sphere{
						radius 75
					}
				}
			]
			rotation 0 1 0 0
		}
	] # end TheSpheres children
	rotation 0 1 0 0
}	
DEF Inner_TmS TimeSensor{
	cycleInterval 20
	enabled TRUE
	loop TRUE
	}
DEF Inner_OI OrientationInterpolator{
	key [
		0,
		0.333333,
		0.666667,
		1]
	keyValue [
		0 1 0 0,
		0 1 0 2.0944,
		0 1 0 4.18879,
		0 1 0 6.28319]
	}
ROUTE Inner_TmS.fraction_changed TO Inner_OI.set_fraction
ROUTE Inner_OI.value_changed TO Inner.set_rotation
DEF Flares_TmS TimeSensor {
	cycleInterval 42
	enabled TRUE
	loop TRUE
	}
DEF FlareExp TimeSensor {
	cycleInterval 3
	enabled TRUE
	loop TRUE
	}
DEF Flares_OI OrientationInterpolator{
	key [
		0,
		0.333333,
		0.666667,
		1]
	keyValue [
		0 1 0 0,
		0 1 0 2.0944,
		0 1 0 4.18879,
		0 1 0 6.28319]
	}
#DEF Flares_SI ScalarInterpolator {
#	key [ 0 .5 1 ]
#	keyValue [ 65 75 65 ] #0 0.7 0 ]
#	}
DEF FlareScale PositionInterpolator {
	key [ 0 .5 1 ]
	keyValue [
		0.9 0.8 0.9
		0.85 0.8 0.85
		0.9 0.8 0.9
	]
}
ROUTE Flares_TmS.fraction_changed TO Flares_OI.set_fraction
ROUTE Flares_OI.value_changed TO Flares.set_rotation
#ROUTE FlareExp.fraction_changed TO Flares_SI.set_fraction
#ROUTE Flares_SI.value_changed TO FlaresT.transparency
ROUTE FlareExp.fraction_changed TO FlareScale.set_fraction
ROUTE FlareScale.value_changed TO Flares.set_scale
DEF Crash Transform{
	rotation 0 1 0 -2.3562
	translation 0 0 100000
	children [
DEF CrashView Viewpoint{
	position 0 400 1000
	orientation -1 0 0 0.38051
	fieldOfView 0.6
	description "The Earth"
	jump TRUE
}
#DEF CrashNav NavigationInfo{
#	type ["NONE" ]
#	avatarSize [0.025, 0.025, 0.025]
#	headlight FALSE
#}
DEF EandC Transform{
	children [
		DEF Earth Transform{
			children [
				Shape{
					appearance Appearance{
						material Material{
							emissiveColor 0.2 0.2 0.2
							diffuseColor 1 1 1
							shininess 0.390625
							transparency 0
						}
						texture ImageTexture{
							url [
								"textures/earth.jpg"]
						}
					}
					geometry Sphere{
						radius 63.78
					}
				}
			]
			scale 1.003 1 1.003
			# 1/127 oblateness
		},
		DEF Clouds Transform{
			children [
				Shape{
					appearance Appearance{
						material Material{
							emissiveColor 0.2 0.2 0.2
							diffuseColor 1 1 1
							shininess 0.390625
						}
						texture ImageTexture{
							url [
								"textures/clouds.gif"]
						}
					}
					geometry Sphere{
						radius 63.98
						# 12 km above sea level
					}
				}
			]
			scale 1.04 1.04 1.04
			# sorry, added separation needed for VRML browser z-buffer noise.
		},
		DEF Haze Transform{
			children [
				Shape{
					appearance Appearance{
						material DEF HazeT Material{
#							emissiveColor 0.35 0.2 0.2
							diffuseColor 0.35 0.2 0.2
							transparency 1
						}
					}
					geometry Sphere{
						radius 64.08
						# 12 km above sea level
					}
				}
			]
			scale 1.1 1.1 1.1
			# sorry, added separation needed for VRML browser z-buffer noise.
		}
	] # end EandC children
	rotation 0 0 1 -.40927971
	# 23.45 degree inclination (23 degrees 27 minutes)
	scale 2.3 2.3 2.3
},	
DEF PlanetLight Transform{
	children [
		PointLight{
			ambientIntensity 0.6
			radius 1500
		}
	]
	rotation 0 0 -1 0
	translation -600 100 1000
},
DEF Asteroid Transform {
	translation	0 0 0
	children [
		Shape {
			appearance Appearance{
				material Material{
					ambientIntensity 0.05
					emissiveColor 0.25 0.15 0.1
					diffuseColor 0.8 0.6 0.4
					specularColor 0.8 0.6 0.4
					shininess 0.5
					}
				texture ImageTexture { url "textures/asteroid.jpg" }
			}
			geometry Sphere {
				radius 10
			}
		} #end Shape
	] #end children of transform
	rotation 0 0 -1 0
	scale 1 0.7 0.6
}
DEF ExplodeTrans Transform{
#	center 0 -20 -180
	children Billboard {
		axisOfRotation 0 0 0
		children [
				DEF GoTouch TouchSensor{}
				DEF WhichImage Switch {
					whichChoice 0
					choice [
						Shape {
							geometry DEF largeFace IndexedFaceSet {
								coord Coordinate {
									point[ -100 -100 160,
													100 -100 160,
													100 100 160,
												 -100 100 160]
								} #end coord
							  coordIndex[ 0, 1, 2, 3]
							} #end geometry
							appearance Appearance {
								material Material{
									diffuseColor 0 0 0
									transparency 1
								}
								texture ImageTexture {
									url "expl01.gif"
									repeatS FALSE
									repeatT FALSE
								}
							} #end appearance
						}, #end shape
						Shape {
							geometry USE largeFace
							appearance Appearance {
								material Material{
									diffuseColor 0 0 0
									transparency 1
								}
								texture ImageTexture {
									url "expl03.gif"
									repeatS FALSE
									repeatT FALSE
								}
							} #end appearance
						}, #end shape
						Shape {
							geometry USE largeFace
							appearance Appearance {
								material Material{
									diffuseColor 0 0 0
									transparency 1
								}
								texture ImageTexture {
									url "expl05.gif"
									repeatS FALSE
									repeatT FALSE
								}
							} #end appearance
						}, #end shape
						Shape {
							geometry USE largeFace
							appearance Appearance {
								material Material{
									diffuseColor 0 0 0
									transparency 1
								}
								texture ImageTexture {
									url "expl09.gif"
									repeatS FALSE
									repeatT FALSE
								}
							} #end appearance
						}, #end shape
						Shape {
							geometry USE largeFace
							appearance Appearance {
								material Material{
									diffuseColor 0 0 0
									transparency 1
								}
								texture ImageTexture {
									url "expl11.gif"
									repeatS FALSE
									repeatT FALSE
								}
							} #end appearance
						}, #end shape
						Shape {
							geometry USE largeFace
							appearance Appearance {
								material Material{
									diffuseColor 0 0 0
									transparency 1
								}
								texture ImageTexture {
									url "expl13.gif"
									repeatS FALSE
									repeatT FALSE
								}
							} #end appearance
						}, #end shape
						Shape {
							geometry USE largeFace
							appearance Appearance {
								material Material{
									diffuseColor 0 0 0
									transparency 1
								}
								texture ImageTexture {
									url "expl15.gif"
									repeatS FALSE
									repeatT FALSE
								}
							} #end appearance
						}, #end shape
						Shape {
							geometry USE largeFace
							appearance Appearance {
								material Material{
									diffuseColor 0 0 0
									transparency 1
								}
								texture ImageTexture {
									url "expl17.gif"
									repeatS FALSE
									repeatT FALSE
								}
							} #end appearance
						}, #end shape
						Shape {
							geometry USE largeFace
							appearance Appearance {
								material Material{
									diffuseColor 0 0 0
									transparency 1
								}
								texture ImageTexture {
									url "expl01.gif"
									repeatS FALSE
									repeatT FALSE
								}
							} #end appearance
						} #end shape
					] #end choice
				}, #end Switch								
		] #end children of Billboard
	} #end Billboard
#	translation 0 20 180
} #end ExplodeTrans transform
] #end Crash children
} #end Crash Transform
DEF BillTime TimeSensor{
		loop FALSE
 		enabled FALSE
		cycleInterval 2 #1.8
		startTime 0
		stopTime 1
}
DEF BillAnimate ScalarInterpolator {
		key [ 0, 0.5, 1 ]
		keyValue [ 0,  4,  8 ]
}
DEF ChangeImage Script {
	eventIn SFFloat newValue
	eventOut SFInt32 newImageCount
	url		
		"javascript:
			function newValue(valueIn){
			newImageCount = Math.round(valueIn);
			}"
}
DEF CheckTrigger Script {
		eventIn SFFloat fromTimer
		eventIn SFRotation earthRotation
		field SFBool triggerSet FALSE
		field SFBool doneOnce FALSE
		eventOut SFBool trigger
		eventOut SFBool trigger2
		eventOut SFTime startIt
#		eventOut SFInt32 imageNumber
		url	
		"javascript:
			function fromTimer(fractionIn){
				if ( doneOnce ) return;
				else 
					if (fractionIn >= 0.85) {
						triggerSet = TRUE;
						doneOnce = TRUE;
					}
			}
			
			function earthRotation(newRotation, timestamp){
				if ( triggerSet == FALSE ) return;
				else
					if ( newRotation[3] > 0.4354 ) {
						if ( newRotation[3] < 1.1355 ) {
							print ('Rotation: ' + newRotation[3]);
							trigger = TRUE;
							trigger2 = TRUE;
							startIt = timestamp;
							triggerSet = FALSE;
						}
					}
			}"
}
ROUTE BillTime.fraction_changed TO BillAnimate.set_fraction
ROUTE BillAnimate.value_changed TO ChangeImage.newValue
ROUTE ChangeImage.newImageCount TO WhichImage.set_whichChoice
#/S/SpinEngine{ object Earth enabled TRUE time 23.9 axis 0.000000
1.000000 0.000000 degrees -360.000000 oscillate FALSE repeat TRUE}
#/SI/Start of SpinEngine
DEF Earth_TmS TimeSensor{
	cycleInterval 23.9
	enabled TRUE
	loop TRUE
	}
DEF Earth_OI OrientationInterpolator{
	key [
		0,
		0.25
		0.5,
		0.75,
		1]
	keyValue [
		0 1 0 1.570796327,
		0 1 0 3.141592654,
		0 1 0 4.71238898,
		0 1 0 0,
		0 1 0 1.570796327]
	}
ROUTE Earth_TmS.fraction_changed TO Earth_OI.set_fraction
ROUTE Earth_OI.value_changed TO Earth.set_rotation
#/SX/End of SpinEngine
#/S/SpinEngine{ object Clouds enabled TRUE time 14.000000 axis 0.000000
1.000000 0.000000 degrees -360.000000 oscillate FALSE repeat TRUE}
#/SI/Start of SpinEngine
DEF Clouds_TmS TimeSensor{
	cycleInterval 14
	enabled TRUE
	loop TRUE
	}
DEF Clouds_OI OrientationInterpolator{
	key [
		0,
		0.333333,
		0.666667,
		1]
	keyValue [
		0 1 0 0,
		0 1 0 2.0944,
		0 1 0 4.18879,
		0 1 0 6.28319]
	}
ROUTE Clouds_TmS.fraction_changed TO Clouds_OI.set_fraction
ROUTE Clouds_OI.value_changed TO Clouds.set_rotation
#/SX/End of SpinEngine
DEF Falling_TmS TimeSensor {
	cycleInterval 22
	loop FALSE
	enabled TRUE
	startTime 0
	stopTime 0
}
DEF Falling_PI PositionInterpolator {
	key [ 0, 0.5, 1 ]
	keyValue [ -30 420 1000, -15 190 500, 0 -40 0 ]
}
#/S/SpinEngine{ object Asteroid enabled TRUE time 12.000000 axis
1.000000 0.000000 0.000000 degrees -360.000000 oscillate FALSE repeat
TRUE}
#/SI/Start of SpinEngine
DEF Asteroid_TmS TimeSensor{
	cycleInterval 7
	enabled TRUE
	loop TRUE
	}
DEF Asteroid_OI OrientationInterpolator{
	key [
		0,
		0.333333,
		0.666667,
		1]
	keyValue [
		1 0 1 0,
		1 0 1 2.0944,
		1 0 1 4.18879,
		1 0 1 6.28319]
	}
	
ROUTE Asteroid_TmS.fraction_changed TO Asteroid_OI.set_fraction
ROUTE Asteroid_OI.value_changed TO Asteroid.set_rotation
#/SX/End of SpinEngine
ROUTE Falling_TmS.fraction_changed TO Falling_PI.set_fraction
ROUTE Falling_PI.value_changed TO Asteroid.set_translation
DEF TitleTimer TimeSensor {
		loop FALSE
		enabled TRUE
		cycleInterval 8
		startTime 0
		stopTime 0
}
DEF HazeTime TimeSensor{
	cycleInterval 12
	enabled FALSE
	loop FALSE
	startTime 0
	stopTime 0
	}
DEF HazeDensity Script {
	eventIn SFFloat fromTimer
	eventOut SFFloat valueChanged
	url [
	"javascript:
		function fromTimer(fractionIn){
				valueChanged = (1 - fractionIn);
		}"
	]
}
DEF SetStop Script {
	eventIn SFTime current
	eventOut SFTime StopIt
	url [
	"javascript:
		function current(value){
			StopIt = (value + 8);
		}"
	]
}
DEF SetStart Script {
	eventIn SFTime current
	eventOut SFBool startIt
	eventOut SFTime theTime
	eventOut SFTime addedTime
	eventOut SFTime startAudio
	eventOut SFTime endAudio
	eventOut SFTime finalOrbit
	
	url [
	"javascript:
		function current(value){
			startIt = TRUE;
			theTime = (value + 6);
			addedTime = (value + 22);
			startAudio = (value + 2);
			endAudio = (value + 114);
			finalOrbit = (value + 62); //was + 58
		}"
	]
}
DEF StartFalling Script {
	eventIn SFBool set_theTime
	eventOut SFTime theTime_changed
	url [
	"javascript:
		function set_theTime( value, timestamp ){
			if ( value == TRUE ) {
				theTime_changed = (timestamp + 1);
			}
		}"
	]
}
DEF Zoom_TmS TimeSensor {
	enabled FALSE
	loop FALSE
	startTime 0
	stopTime 0
	cycleInterval 16
}
DEF Zoom_PI PositionInterpolator {
	key [ 0,  0.25, 0.5, 0.75, 1 ]
	keyValue [ 0 0 1000, 0 0 6000, 0 0 10000, -35 200 20000, -707.10678 400
99292.89322 ]
}
DEF Zoom_OI OrientationInterpolator {
	key [ 0, 0.5, 0.65, 0.75, 1 ]
	keyValue [
		0 1 0 0
		-0.078102 -0.97895 -0.18856 0.4
		-0.078102 -0.97895 -0.18856 1.1855
		-0.078102 -0.97895 -0.18856 2.3711
		-0.078102 -0.97895 -0.18856 2.3711	
	]
}
DEF TriggerCrash Script {
		eventIn SFFloat fromTimer
		field SFBool doneOnce FALSE
		eventOut SFBool animationEnable
		eventOut SFBool viewpointDisable
		url [		
		"javascript:
			function fromTimer(fractionIn){
				if (fractionIn >= 0.95) {
					if (doneOnce == TRUE) return;
					else {
						doneOnce = TRUE;
						animationEnable = TRUE;
						viewpointDisable = FALSE;
					}
				}
				else {trigger = FALSE;}
			}"
		]	
}
DEF ErasePrompt Script {
		eventIn SFTime timeIn
		field MFString name "../blanktxt.html"
		field MFString param "target=HTMLTEXT"
		eventOut SFTime startNow
		url [
		"vrmlscript:
			function timeIn( value, timestamp ){
				if ( value > 0 ) {
					startNow = timestamp;
					Browser.loadURL ( name, param );
				}
			}"
		]
} 
DEF TitleOff Script {
		eventIn SFFloat fromTimer
		eventOut SFTime timeIt
		url [		
		"javascript:
			function fromTimer(fractionIn, timestamp){
				if (fractionIn >= 0.3) {
					timeIt = (timestamp);
				}
			}"
		]	
}
DEF SwitchItOn Script {
eventIn SFBool trigger
eventOut SFBool animationEnable
eventOut SFBool viewpointDisable
url [
	"javascript:
	function trigger(value){
		if (value == TRUE) {
			animationEnable = TRUE;
			viewpointDisable = FALSE;
		}
	}"
	]
}
DEF aSound Sound {
	source DEF TestSound AudioClip {
		url "scen01a.wav"
		startTime -1
		stopTime 0
		loop FALSE
	}
	minBack	100000
	minFront 100000
	maxBack	100000
	maxFront 100000
	spatialize FALSE
	intensity 1
	location 0 0 70000
}
DEF doneHere Script {
	eventIn SFBool trigger
	field SFBool doneOnce FALSE
	field MFString name2 "../l_muse1.html"
	field MFString param2 "target=HTMLTEXT"
#	field MFString name3 "../museum.html"
#	field MFString param3 "target=VRML"
	url [
		"javascript:
		function trigger( value, timestamp ) {
			if (value == FALSE) {
					Browser.loadURL ( name2, param2 );
//					Browser.loadURL ( name3, param3 ); 
				}
		}"
	]
}
#				if ( doneOnce == FALSE ) {
#					doneOnce = TRUE;
#					return;
#				}
#				else {
DEF FinalOrbit_TS TimeSensor {
	cycleInterval 44
	loop TRUE
	enabled FALSE
	startTime -1
	stopTime 0
}
DEF FinalOrbit_PI PositionInterpolator {
	key [ 0 0.25 0.5 0.75 1 ]
	keyValue [
		0 400 1000
		-1000 0 0
		0 -400 -1000
		1000 0 0
		0 400 1000
	]
}
DEF FinalOrbit_OI OrientationInterpolator {
	key [ 0 0.25 0.5 0.75 1 ]
	keyValue [
		1 0 0 -0.38051
		0 1 0 -1.5708
#		0 1 0 -3.14159
		0 0.98196 -0.18911 3.14159
		0 1 0 -4.71239
		1 0 0 -0.38051
	]
}
ROUTE SetStart.startAudio TO TestSound.startTime
ROUTE SetStart.endAudio TO TestSound.stopTime
ROUTE SetStart.finalOrbit TO FinalOrbit_TS.startTime
ROUTE TestSound.isActive TO doneHere.trigger
 
ROUTE SetStart.addedTime TO Zoom_TmS.stopTime
ROUTE SetStart.theTime TO Zoom_TmS.startTime
ROUTE SetStart.startIt TO Zoom_TmS.enabled
ROUTE Zoom_TmS.fraction_changed TO Zoom_PI.set_fraction
ROUTE Zoom_PI.value_changed TO ZoomView.set_translation
ROUTE Zoom_TmS.fraction_changed TO Zoom_OI.set_fraction
ROUTE Zoom_OI.value_changed TO ZoomView.set_rotation
ROUTE Zoom_TmS.fraction_changed TO TriggerCrash.fromTimer
#ROUTE TriggerCrash.trigger TO SwitchItOn.trigger
#ROUTE SwitchItOn.animationEnable TO CrashView.set_bind
#ROUTE SwitchItOn.animationEnable TO StartFalling.set_theTime
#ROUTE SwitchItOn.viewpointDisable TO Zoom_TmS.enabled
ROUTE TriggerCrash.animationEnable TO CrashView.set_bind
ROUTE TriggerCrash.animationEnable TO StartFalling.set_theTime
ROUTE TriggerCrash.viewpointDisable TO Zoom_TmS.enabled
ROUTE Falling_TmS.fraction_changed TO CheckTrigger.fromTimer
ROUTE Earth_OI.value_changed TO CheckTrigger.earthRotation
ROUTE CheckTrigger.trigger TO BillTime.enabled
ROUTE CheckTrigger.trigger2 TO HazeTime.enabled
ROUTE CheckTrigger.trigger2 TO FinalOrbit_TS.enabled
#ROUTE CheckTrigger.imageNumber TO WhichImage.set_whichChoice
#ROUTE Falling_TmS.time TO BillTime.startTime
ROUTE CheckTrigger.startIt TO BillTime.startTime
ROUTE StartFalling.theTime_changed TO Falling_TmS.startTime
ROUTE HazeTime.fraction_changed TO HazeDensity.fromTimer
ROUTE HazeDensity.valueChanged TO HazeT.transparency
#ROUTE Falling_TmS.time TO HazeTime.startTime
#ROUTE Falling_TmS.time TO SetStop.current
ROUTE CheckTrigger.startIt TO HazeTime.startTime
ROUTE CheckTrigger.startIt TO SetStop.current
ROUTE SetStop.StopIt TO HazeTime.stopTime
ROUTE FinalOrbit_TS.fraction_changed TO FinalOrbit_PI.set_fraction
ROUTE FinalOrbit_TS.fraction_changed TO FinalOrbit_OI.set_fraction
ROUTE FinalOrbit_PI.value_changed TO CrashView.position
ROUTE FinalOrbit_OI.value_changed TO CrashView.orientation
ROUTE TitleTimer.fraction_changed TO Title_PI.set_fraction
ROUTE Title_PI.value_changed TO Title.set_translation
ROUTE TitleTimer.fraction_changed TO TitleOff.fromTimer
ROUTE TitleOff.timeIt TO SetStart.current
#ROUTE TitleTouch.touchTime TO TitleTimer.startTime
#ROUTE TitleTouch.touchTime TO ErasePrompt.timeIn
#DEF removeWait Script {
#	eventIn SFTime triggerTime
#	field MFString textURL "../blanktxt.html"
#	field MFString textFrame "target=HTMLTEXT"
#	url ["javascript:
#			function triggerTime( value, timestamp ) {
#				if ( value > 0 ) {
#					Browser.loadURL( textURL, textFrame );
#				}
#			}"
#		]
#}
ROUTE ErasePrompt.startNow TO TitleTimer.startTime
ROUTE TestSound.duration_changed TO ErasePrompt.timeIn