<?xml version="1.0" encoding="UTF-8" ?>

<PropertyList>

	<path>jetway-movable-3.ac</path>

	<!-- JETWAY 1 -->
	<animation>
		<type>pick</type>
		<object-name>Rotunda1</object-name>
		<object-name>Tunnel1Rotunda</object-name>
		<object-name>Tunnel1</object-name>
		<object-name>Tunnel2</object-name>
		<object-name>Tunnel3</object-name>
		<object-name>Rotunda2</object-name>
		<object-name>Entrance</object-name>
		<object-name>Hood</object-name>
		<action>
			<button>0</button>
			<repeatable type="bool">false</repeatable>
			<binding>
				<command>nasal</command>
				<!-- Nasal pick code for jetway 1 -->
				<script><![CDATA[
				 if (props.globals.getNode("/scenery/airport/jetway[0]/extended") == nil)
				  {
				  props.globals.initNode("/scenery/airport/jetway[0]/extended", 0, "BOOL");
				  setprop("/scenery/airport/jetway[0]/position-norm", 0);
				  }
				 if (props.globals.getNode("/scenery/airport/jetway-movable-debug") == nil)
				  {
				  props.globals.initNode("/scenery/airport/jetway-movable-debug", 0, "BOOL");
				  }

				 # nasal interpolation function - returns a value based on a set interpolation table, like the <interpolate> feature of XML animations
				 # takes an array with sub-arrays, like
				 # [[<ind>, <dep>], [<ind>, <dep>]]
				 var interpolateTable = func(table, value)
				  {
				  var newValue = 0;

				  forindex (i; table)
				   {
				   if (value >= table[i][0])
				    {
				    if (i + 1 < size(table))
				     {
				     newValue = (value - table[i][0]) / (table[i + 1][0] - table[i][0]) * (table[i + 1][1] - table[i][1]) + table[i][1];
				     }
				    else
				     {
				     newValue = table[i][1];
				     }
				    }
				   }

				  return newValue;
				  };

				 if (props.globals.getNode("/aircraft/door[0]/x-m") != nil and props.globals.getNode("/aircraft/door[0]/y-m") != nil and props.globals.getNode("/aircraft/door[0]/z-m") != nil)
				  {
				  var xm = getprop("/aircraft/door[0]/x-m");
				  var ym = getprop("/aircraft/door[0]/y-m") - 2.65;
				  var zm = getprop("/aircraft/door[0]/z-m") - 3.752;

				  # calculate the extension length using the Pythagorean Theorem (c = sqrt(a^2 + b^2))
				  var xtranslate = math.sqrt(xm * xm + ym * ym) - 19.536;
				  # calculate the rotation angle along the Y axis
				  var yrotate = math.atan2(zm / xm, 1) * R2D;
				  # calculate the rotation angle along the Z axis
				  var zrotate = math.atan2(ym / xm, 1) * R2D;
				  # hood rotation angle is predefined
				  var hoodrotate = getprop("/aircraft/jetway-hood-deg");
				  }
				 # old system (legacy support)
				 elsif (props.globals.getNode("/aircraft/jetway-pos/x-tra") != nil and props.globals.getNode("/aircraft/jetway-pos/y-rot") != nil and props.globals.getNode("/aircraft/jetway-pos/z-rot") != nil and props.globals.getNode("/aircraft/jetway-pos/hood-rot") != nil)
				  {
				  # rotation angles and extension lengths are predefined
				  var xtranslate = getprop("/aircraft/jetway-pos/x-tra");
				  var yrotate = getprop("/aircraft/jetway-pos/y-rot");
				  var zrotate = getprop("/aircraft/jetway-pos/z-rot");
				  var hoodrotate = getprop("/aircraft/jetway-pos/hood-rot");
				  }
				 var xtranslaterate = 0.5;
				 var xtranslatetable = [
				   [0.0, 0.0],
				   [0.2, 0.5],
				   [0.6, 0.5],
				   [0.8, 1.0],
				   [1.0, 1.0]
				  ];

				 var yrotaterate = 1;
				 var yrotatetable = [
				   [0.0, 0.0],
				   [0.4, 0.7],
				   [0.7, 1.0],
				   [1.0, 1.0]
				  ];

				 var zrotaterate = 1;
				 var zrotatetable = [
				   [0.0, 0.0],
				   [0.2, 0.0],
				   [0.6, 0.7],
				   [0.8, 0.7],
				   [0.9, 1.0],
				   [1.0, 1.0]
				  ];

				 var zentrancerotaterate = 5;
				 var zentrancerotatetable = [
				   [0.0, 0.0],
				   [0.5, 0.0],
				   [0.6, 0.7],
				   [0.8, 0.7],
				   [0.9, 1.0],
				   [1.0, 1.0]
				  ];

				 var hoodrotaterate = 1;
				 var hoodrotatetable = [
				   [0.0, 0.0],
				   [0.9, 0.0],
				   [1,0, 1.0]
				  ];

				 if (xtranslate != nil and yrotate != nil and zrotate != nil and hoodrotate != nil)
				  {
				  var length = math.abs(xtranslate / xtranslaterate) + math.abs(yrotate / yrotaterate) + math.abs(zrotate / zrotaterate) + math.abs(zrotate / zentrancerotaterate) + math.abs(hoodrotate / hoodrotaterate);

				  if (props.globals.getNode("/scenery/airport/jetway-movable-debug").getBoolValue())
				   {
				   print("Animated jetway debug information:");
				   print("----------------------------------");
				   print("x-translation-m: " ~ xtranslate);
				   print("y-rotation-deg: " ~ yrotate);
				   print("z-rotation-deg: " ~ zrotate);
				   print("hood-x-rotation-deg: " ~ hoodrotate);
				   print("");
				   print("Total animation time: " ~ length ~ " seconds");
				   }
				  if (!props.globals.getNode("/scenery/airport/jetway[0]/extended").getBoolValue())
				   {
				   props.globals.getNode("/scenery/airport/jetway[0]/extended").setBoolValue(1);
				   interpolate("/scenery/airport/jetway[0]/position-norm",
				     1, -getprop("/scenery/airport/jetway[0]/position-norm") + 1 * length
				   );
				   gui.popupTip("Extending jetway.");

				   var loop = func
				    {
				    var position = getprop("/scenery/airport/jetway[0]/position-norm");
				    setprop("/scenery/airport/jetway[0]/x-translation-m", interpolateTable(xtranslatetable, position) * xtranslate);
				    setprop("/scenery/airport/jetway[0]/y-rotation-deg", interpolateTable(yrotatetable, position) * yrotate);
				    setprop("/scenery/airport/jetway[0]/z-rotation-deg", interpolateTable(zrotatetable, position) * zrotate);
				    setprop("/scenery/airport/jetway[0]/z-entrance-rotation-deg", interpolateTable(zentrancerotatetable, position) * zrotate) ;
				    setprop("/scenery/airport/jetway[0]/hood-x-rotation-deg", interpolateTable(hoodrotatetable, position) * hoodrotate);

				    if (position < 1 and props.globals.getNode("/scenery/airport/jetway[0]/extended").getBoolValue())
				     {
				     settimer(loop, 0);
				     }
				    };
				   loop();
				   }
				  elsif (props.globals.getNode("/scenery/airport/jetway[0]/extended").getBoolValue())
				   {
				   props.globals.getNode("/scenery/airport/jetway[0]/extended").setBoolValue(0);
				   interpolate("/scenery/airport/jetway[0]/position-norm",
				     0, getprop("/scenery/airport/jetway[0]/position-norm") * length
				    );
				   gui.popupTip("Retracting jetway.");

				   var loop = func
				    {
				    var position = getprop("/scenery/airport/jetway[0]/position-norm");
				    setprop("/scenery/airport/jetway[0]/x-translation-m", interpolateTable(xtranslatetable, position) * xtranslate);
				    setprop("/scenery/airport/jetway[0]/y-rotation-deg", interpolateTable(yrotatetable, position) * yrotate);
				    setprop("/scenery/airport/jetway[0]/z-rotation-deg", interpolateTable(zrotatetable, position) * zrotate);
				    setprop("/scenery/airport/jetway[0]/z-entrance-rotation-deg", interpolateTable(zentrancerotatetable, position) * zrotate);
				    setprop("/scenery/airport/jetway[0]/hood-x-rotation-deg", interpolateTable(hoodrotatetable, position) * hoodrotate);

				    if (position > 0 and !props.globals.getNode("/scenery/airport/jetway[0]/extended").getBoolValue())
				     {
				     settimer(loop, 0);
				     }
				    };
				   loop();
				   }
				  }
				 else
				  {
				  gui.popupTip("Cannot extend jetway: Your aircraft does not define the required positioning information.");
				  }
				]]></script>
			</binding>
		</action>
	</animation>

	<animation>
		<type>rotate</type>
		<object-name>Tunnel1Rotunda</object-name>
		<object-name>Tunnel1</object-name>
		<object-name>Tunnel2</object-name>
		<object-name>Tunnel3</object-name>
		<object-name>Rotunda2</object-name>
		<object-name>Entrance</object-name>
		<object-name>Hood</object-name>
		<property>/scenery/airport/jetway[0]/z-rotation-deg</property>
		<center>
			<x-m>0</x-m>
			<y-m>0</y-m>
			<z-m>0</z-m>
		</center>
		<axis>
			<x>0</x>
			<y>0</y>
			<z>1</z>
		</axis>
	</animation>

	<animation>
		<type>translate</type>
		<object-name>Tunnel2</object-name>
		<object-name>Tunnel3</object-name>
		<object-name>Rotunda2</object-name>
		<object-name>Entrance</object-name>
		<object-name>Hood</object-name>
		<property>/scenery/airport/jetway[0]/x-translation-m</property>
		<axis>
			<x>1</x>
			<y>0</y>
			<z>0</z>
		</axis>
	</animation>

	<animation>
		<type>rotate</type>
		<object-name>Entrance</object-name>
		<object-name>Hood</object-name>
		<property>/scenery/airport/jetway[0]/z-entrance-rotation-deg</property>
		<center>
			<x-m>19.536</x-m>
			<y-m>0.081</y-m>
			<z-m>0</z-m>
		</center>
		<axis>
			<x>0</x>
			<y>0</y>
			<z>-1</z>
		</axis>
	</animation>

	<animation>
		<type>rotate</type>
		<object-name>Tunnel1</object-name>
		<object-name>Tunnel2</object-name>
		<object-name>Rotunda2</object-name>
		<object-name>Entrance</object-name>
		<object-name>Hood</object-name>
		<property>/scenery/airport/jetway[0]/y-rotation-deg</property>
		<center>
			<x-m>1.5</x-m>
			<y-m>0</y-m>
			<z-m>4</z-m>
		</center>
		<axis>
			<x>0</x>
			<y>-1</y>
			<z>0</z>
		</axis>
	</animation>

	<animation>
		<type>rotate</type>
		<object-name>Hood</object-name>
		<property>/scenery/airport/jetway[0]/hood-x-rotation-deg</property>
		<center>
			<x-m>0</x-m>
			<y-m>2.019</y-m>
			<z-m>3.852</z-m>
		</center>
		<axis>
			<x>1</x>
			<y>0</y>
			<z>0</z>
		</axis>
	</animation>

	<!-- JETWAY 2 -->
	<animation>
		<type>pick</type>
		<object-name>Rotunda1.001</object-name>
		<object-name>Tunnel1Rotunda.001</object-name>
		<object-name>Tunnel1.001</object-name>
		<object-name>Tunnel2.001</object-name>
		<object-name>Tunnel3.001</object-name>
		<object-name>Rotunda2.001</object-name>
		<object-name>Entrance.001</object-name>
		<object-name>Hood.001</object-name>
		<action>
			<button>0</button>
			<repeatable type="bool">false</repeatable>
			<binding>
				<command>nasal</command>
				<!-- Nasal pick code for jetway 2 -->
				<script><![CDATA[
				 if (props.globals.getNode("/scenery/airport/jetway[1]/extended") == nil)
				  {
				  props.globals.initNode("/scenery/airport/jetway[1]/extended", 0, "BOOL");
				  setprop("/scenery/airport/jetway[1]/position-norm", 0);
				  }
				 if (props.globals.getNode("/scenery/airport/jetway-movable-debug") == nil)
				  {
				  props.globals.initNode("/scenery/airport/jetway-movable-debug", 0, "BOOL");
				  }

				 # nasal interpolation function - returns a value based on a set interpolation table, like the <interpolate> feature of XML animations
				 # takes an array with sub-arrays, like
				 # [[<ind>, <dep>], [<ind>, <dep>]]
				 var interpolateTable = func(table, value)
				  {
				  var newValue = 0;

				  forindex (i; table)
				   {
				   if (value >= table[i][0])
				    {
				    if (i + 1 < size(table))
				     {
				     newValue = (value - table[i][0]) / (table[i + 1][0] - table[i][0]) * (table[i + 1][1] - table[i][1]) + table[i][1];
				     }
				    else
				     {
				     newValue = table[i][1];
				     }
				    }
				   }

				  return newValue;
				  };

				 if (props.globals.getNode("/aircraft/door[1]/x-m") != nil and props.globals.getNode("/aircraft/door[1]/y-m") != nil and props.globals.getNode("/aircraft/door[1]/z-m") != nil)
				  {
				  var xm = getprop("/aircraft/door[1]/x-m") - 18;
				  var ym = getprop("/aircraft/door[1]/y-m") + 2.35;
				  var zm = getprop("/aircraft/door[1]/z-m") - 3.752;

				  # calculate the extension length using the Pythagorean Theorem (c = sqrt(a^2 + b^2))
				  var xtranslate = math.sqrt(xm * xm + ym * ym) - 11.536;
				  # calculate the rotation angle along the Y axis
				  var yrotate = math.atan2(zm / xm, 1) * R2D;
				  # calculate the rotation angle along the Z axis
				  var zrotate = math.atan2(ym / xm, 1) * R2D;
				  # hood rotation angle is predefined
				  var hoodrotate = getprop("/aircraft/jetway-hood-deg");
				  }
				 # old system (legacy support)
				 elsif (props.globals.getNode("/aircraft/jetway2-pos/x-tra") != nil and props.globals.getNode("/aircraft/jetway2-pos/y-rot") != nil and props.globals.getNode("/aircraft/jetway2-pos/z-rot") != nil and props.globals.getNode("/aircraft/jetway2-pos/hood-rot") != nil)
				  {
				  # rotation angles and extension lengths are predefined
				  var xtranslate = getprop("/aircraft/jetway2-pos/x-tra");
				  var yrotate = getprop("/aircraft/jetway2-pos/y-rot");
				  var zrotate = getprop("/aircraft/jetway2-pos/z-rot");
				  var hoodrotate = getprop("/aircraft/jetway2-pos/hood-rot");
				  }
				 var xtranslaterate = 0.5;
				 var xtranslatetable = [
				   [0.0, 0.0],
				   [0.6, 0.0],
				   [0.8, 1.0],
				   [1.0, 1.0]
				  ];

				 var yrotaterate = 1;
				 var yrotatetable = [
				   [0.0, 0.0],
				   [0.6, 0.0],
				   [0.7, 1.0],
				   [1.0, 1.0]
				  ];

				 var zrotaterate = 1;
				 var zrotatetable = [
				   [0.0, 0.0],
				   [0.4, 0.7],
				   [0.6, 1.0],
				   [1.0, 1.0]
				  ];

				 var zentrancerotaterate = 5;
				 var zentrancerotatetable = [
				   [0.0, 0.0],
				   [0.5, 0.0],
				   [0.6, 0.7],
				   [0.7, 1.0],
				   [1.0, 1.0]
				  ];

				 var hoodrotaterate = 1;
				 var hoodrotatetable = [
				   [0.0, 0.0],
				   [0.9, 0.0],
				   [1,0, 1.0]
				  ];

				 if (xtranslate != nil and yrotate != nil and zrotate != nil and hoodrotate != nil)
				  {
				  var length = math.abs(xtranslate / xtranslaterate) + math.abs(yrotate / yrotaterate) + math.abs(zrotate / zrotaterate) + math.abs(zrotate / zentrancerotaterate) + math.abs(hoodrotate / hoodrotaterate);

				  if (props.globals.getNode("/scenery/airport/jetway-movable-debug").getBoolValue())
				   {
				   print("Animated jetway debug information:");
				   print("----------------------------------");
				   print("x-translation-m: " ~ xtranslate);
				   print("y-rotation-deg: " ~ yrotate);
				   print("z-rotation-deg: " ~ zrotate);
				   print("hood-x-rotation-deg: " ~ hoodrotate);
				   print("");
				   print("Total animation time: " ~ length ~ " seconds");
				   }
				  if (!props.globals.getNode("/scenery/airport/jetway[1]/extended").getBoolValue())
				   {
				   props.globals.getNode("/scenery/airport/jetway[1]/extended").setBoolValue(1);
				   interpolate("/scenery/airport/jetway[1]/position-norm",
				     1, -getprop("/scenery/airport/jetway[1]/position-norm") + 1 * length
				   );
				   gui.popupTip("Extending jetway.");

				   var loop = func
				    {
				    var position = getprop("/scenery/airport/jetway[1]/position-norm");
				    setprop("/scenery/airport/jetway[1]/x-translation-m", interpolateTable(xtranslatetable, position) * xtranslate);
				    setprop("/scenery/airport/jetway[1]/y-rotation-deg", interpolateTable(yrotatetable, position) * yrotate);
				    setprop("/scenery/airport/jetway[1]/z-rotation-deg", interpolateTable(zrotatetable, position) * zrotate);
				    setprop("/scenery/airport/jetway[1]/z-entrance-rotation-deg", interpolateTable(zentrancerotatetable, position) * zrotate) ;
				    setprop("/scenery/airport/jetway[1]/hood-x-rotation-deg", interpolateTable(hoodrotatetable, position) * hoodrotate);

				    if (position < 1 and props.globals.getNode("/scenery/airport/jetway[1]/extended").getBoolValue())
				     {
				     settimer(loop, 0);
				     }
				    };
				   loop();
				   }
				  elsif (props.globals.getNode("/scenery/airport/jetway[1]/extended").getBoolValue())
				   {
				   props.globals.getNode("/scenery/airport/jetway[1]/extended").setBoolValue(0);
				   interpolate("/scenery/airport/jetway[1]/position-norm",
				     0, getprop("/scenery/airport/jetway[1]/position-norm") * length
				    );
				   gui.popupTip("Retracting jetway.");

				   var loop = func
				    {
				    var position = getprop("/scenery/airport/jetway[1]/position-norm");
				    setprop("/scenery/airport/jetway[1]/x-translation-m", interpolateTable(xtranslatetable, position) * xtranslate);
				    setprop("/scenery/airport/jetway[1]/y-rotation-deg", interpolateTable(yrotatetable, position) * yrotate);
				    setprop("/scenery/airport/jetway[1]/z-rotation-deg", interpolateTable(zrotatetable, position) * zrotate);
				    setprop("/scenery/airport/jetway[1]/z-entrance-rotation-deg", interpolateTable(zentrancerotatetable, position) * zrotate);
				    setprop("/scenery/airport/jetway[1]/hood-x-rotation-deg", interpolateTable(hoodrotatetable, position) * hoodrotate);

				    if (position > 0 and !props.globals.getNode("/scenery/airport/jetway[1]/extended").getBoolValue())
				     {
				     settimer(loop, 0);
				     }
				    };
				   loop();
				   }
				  }
				 else
				  {
				  gui.popupTip("Cannot extend jetway: Your aircraft does not define the required positioning information.");
				  }
				]]></script>
			</binding>
		</action>
	</animation>

	<animation>
		<type>rotate</type>
		<object-name>Tunnel1Rotunda.001</object-name>
		<object-name>Tunnel1.001</object-name>
		<object-name>Tunnel2.001</object-name>
		<object-name>Tunnel3.001</object-name>
		<object-name>Rotunda2.001</object-name>
		<object-name>Entrance.001</object-name>
		<object-name>Hood.001</object-name>
		<property>/scenery/airport/jetway[1]/z-rotation-deg</property>
		<center>
			<x-m>18</x-m>
			<y-m>-5</y-m>
			<z-m>0</z-m>
		</center>
		<axis>
			<x>0</x>
			<y>0</y>
			<z>1</z>
		</axis>
	</animation>

	<animation>
		<type>translate</type>
		<object-name>Tunnel2.001</object-name>
		<object-name>Tunnel3.001</object-name>
		<object-name>Rotunda2.001</object-name>
		<object-name>Entrance.001</object-name>
		<object-name>Hood.001</object-name>
		<property>/scenery/airport/jetway[1]/x-translation-m</property>
		<axis>
			<x>1</x>
			<y>0</y>
			<z>0</z>
		</axis>
	</animation>

	<animation>
		<type>rotate</type>
		<object-name>Entrance.001</object-name>
		<object-name>Hood.001</object-name>
		<property>/scenery/airport/jetway[1]/z-entrance-rotation-deg</property>
		<center>
			<x-m>29.536</x-m>
			<y-m>-5.081</y-m>
			<z-m>0</z-m>
		</center>
		<axis>
			<x>0</x>
			<y>0</y>
			<z>-1</z>
		</axis>
	</animation>

	<animation>
		<type>rotate</type>
		<object-name>Tunnel1.001</object-name>
		<object-name>Tunnel2.001</object-name>
		<object-name>Rotunda2.001</object-name>
		<object-name>Entrance.001</object-name>
		<object-name>Hood.001</object-name>
		<property>/scenery/airport/jetway[1]/y-rotation-deg</property>
		<center>
			<x-m>19.5</x-m>
			<y-m>0</y-m>
			<z-m>4</z-m>
		</center>
		<axis>
			<x>0</x>
			<y>-1</y>
			<z>0</z>
		</axis>
	</animation>

	<animation>
		<type>rotate</type>
		<object-name>Hood.001</object-name>
		<property>/scenery/airport/jetway[1]/hood-x-rotation-deg</property>
		<center>
			<x-m>0</x-m>
			<y-m>-2.982</y-m>
			<z-m>3.852</z-m>
		</center>
		<axis>
			<x>1</x>
			<y>0</y>
			<z>0</z>
		</axis>
	</animation>

	<!-- JETWAY 3 -->
	<animation>
		<type>pick</type>
		<object-name>Rotunda1.002</object-name>
		<object-name>Tunnel1Rotunda.002</object-name>
		<object-name>Tunnel1.002</object-name>
		<object-name>Tunnel2.002</object-name>
		<object-name>Tunnel3.002</object-name>
		<object-name>Rotunda2.002</object-name>
		<object-name>Entrance.002</object-name>
		<object-name>Hood.002</object-name>
		<action>
			<button>0</button>
			<repeatable type="bool">false</repeatable>
			<binding>
				<command>nasal</command>
				<!-- Nasal pick code for jetway 3 -->
				<script><![CDATA[
				 if (props.globals.getNode("/scenery/airport/jetway[2]/extended") == nil)
				  {
				  props.globals.initNode("/scenery/airport/jetway[2]/extended", 0, "BOOL");
				  setprop("/scenery/airport/jetway[2]/position-norm", 0);
				  }
				 if (props.globals.getNode("/scenery/airport/jetway-movable-debug") == nil)
				  {
				  props.globals.initNode("/scenery/airport/jetway-movable-debug", 0, "BOOL");
				  }

				 # nasal interpolation function - returns a value based on a set interpolation table, like the <interpolate> feature of XML animations
				 # takes an array with sub-arrays, like
				 # [[<ind>, <dep>], [<ind>, <dep>]]
				 var interpolateTable = func(table, value)
				  {
				  var newValue = 0;

				  forindex (i; table)
				   {
				   if (value >= table[i][0])
				    {
				    if (i + 1 < size(table))
				     {
				     newValue = (value - table[i][0]) / (table[i + 1][0] - table[i][0]) * (table[i + 1][1] - table[i][1]) + table[i][1];
				     }
				    else
				     {
				     newValue = table[i][1];
				     }
				    }
				   }

				  return newValue;
				  };

				 var xtranslate = nil;
				 var yrotate = nil;
				 var zrotate = nil;
				 var hoodrotate = nil;

				 if (props.globals.getNode("/aircraft/door[2]/x-m") != nil and props.globals.getNode("/aircraft/door[2]/y-m") != nil and props.globals.getNode("/aircraft/door[2]/z-m") != nil)
				  {print("DEBUG");
				  var xm = getprop("/aircraft/door[2]/x-m") - 18;
				  var ym = getprop("/aircraft/door[2]/y-m") + 7.35;
				  var zm = getprop("/aircraft/door[2]/z-m") - 5.752;

				  # calculate the extension length using the Pythagorean Theorem (c = sqrt(a^2 + b^2))
				  xtranslate = math.sqrt(xm * xm + ym * ym) - 11.536;
				  # calculate the rotation angle along the Y axis
				  yrotate = math.atan2(zm / xm, 1) * R2D;
				  # calculate the rotation angle along the Z axis
				  zrotate = math.atan2(ym / xm, 1) * R2D;
				  # hood rotation angle is predefined
				  hoodrotate = getprop("/aircraft/jetway-hood-deg");
				  }
				 # old system (legacy support)
				 elsif (props.globals.getNode("/aircraft/jetway3-pos/x-tra") != nil and props.globals.getNode("/aircraft/jetway3-pos/y-rot") != nil and props.globals.getNode("/aircraft/jetway3-pos/z-rot") != nil and props.globals.getNode("/aircraft/jetway3-pos/hood-rot") != nil)
				  {
				  # rotation angles and extension lengths are predefined
				  xtranslate = getprop("/aircraft/jetway3-pos/x-tra");
				  yrotate = getprop("/aircraft/jetway3-pos/y-rot");
				  zrotate = getprop("/aircraft/jetway3-pos/z-rot");
				  hoodrotate = getprop("/aircraft/jetway3-pos/hood-rot");
				  }
				 var xtranslaterate = 0.5;
				 var xtranslatetable = [
				   [0.0, 0.0],
				   [0.6, 0.0],
				   [0.8, 1.0],
				   [1.0, 1.0]
				  ];

				 var yrotaterate = 1;
				 var yrotatetable = [
				   [0.0, 0.0],
				   [0.6, 0.0],
				   [0.7, 1.0],
				   [1.0, 1.0]
				  ];

				 var zrotaterate = 1;
				 var zrotatetable = [
				   [0.0, 0.0],
				   [0.4, 0.7],
				   [0.6, 1.0],
				   [1.0, 1.0]
				  ];

				 var zentrancerotaterate = 5;
				 var zentrancerotatetable = [
				   [0.0, 0.0],
				   [0.5, 0.0],
				   [0.6, 0.7],
				   [0.7, 1.0],
				   [1.0, 1.0]
				  ];

				 var hoodrotaterate = 1;
				 var hoodrotatetable = [
				   [0.0, 0.0],
				   [0.9, 0.0],
				   [1,0, 1.0]
				  ];

				 if (xtranslate != nil and yrotate != nil and zrotate != nil and hoodrotate != nil)
				  {
				  var length = math.abs(xtranslate / xtranslaterate) + math.abs(yrotate / yrotaterate) + math.abs(zrotate / zrotaterate) + math.abs(zrotate / zentrancerotaterate) + math.abs(hoodrotate / hoodrotaterate);

				  if (props.globals.getNode("/scenery/airport/jetway-movable-debug").getBoolValue())
				   {
				   print("Animated jetway debug information:");
				   print("----------------------------------");
				   print("x-translation-m: " ~ xtranslate);
				   print("y-rotation-deg: " ~ yrotate);
				   print("z-rotation-deg: " ~ zrotate);
				   print("hood-x-rotation-deg: " ~ hoodrotate);
				   print("");
				   print("Total animation time: " ~ length ~ " seconds");
				   }
				  if (!props.globals.getNode("/scenery/airport/jetway[2]/extended").getBoolValue())
				   {
				   props.globals.getNode("/scenery/airport/jetway[2]/extended").setBoolValue(1);
				   interpolate("/scenery/airport/jetway[2]/position-norm",
				     1, -getprop("/scenery/airport/jetway[2]/position-norm") + 1 * length
				   );
				   gui.popupTip("Extending jetway.");

				   var loop = func
				    {
				    var position = getprop("/scenery/airport/jetway[2]/position-norm");
				    setprop("/scenery/airport/jetway[2]/x-translation-m", interpolateTable(xtranslatetable, position) * xtranslate);
				    setprop("/scenery/airport/jetway[2]/y-rotation-deg", interpolateTable(yrotatetable, position) * yrotate);
				    setprop("/scenery/airport/jetway[2]/z-rotation-deg", interpolateTable(zrotatetable, position) * zrotate);
				    setprop("/scenery/airport/jetway[2]/z-entrance-rotation-deg", interpolateTable(zentrancerotatetable, position) * zrotate) ;
				    setprop("/scenery/airport/jetway[2]/hood-x-rotation-deg", interpolateTable(hoodrotatetable, position) * hoodrotate);

				    if (position < 1 and props.globals.getNode("/scenery/airport/jetway[2]/extended").getBoolValue())
				     {
				     settimer(loop, 0);
				     }
				    };
				   loop();
				   }
				  elsif (props.globals.getNode("/scenery/airport/jetway[2]/extended").getBoolValue())
				   {
				   props.globals.getNode("/scenery/airport/jetway[2]/extended").setBoolValue(0);
				   interpolate("/scenery/airport/jetway[2]/position-norm",
				     0, getprop("/scenery/airport/jetway[2]/position-norm") * length
				    );
				   gui.popupTip("Retracting jetway.");

				   var loop = func
				    {
				    var position = getprop("/scenery/airport/jetway[2]/position-norm");
				    setprop("/scenery/airport/jetway[2]/x-translation-m", interpolateTable(xtranslatetable, position) * xtranslate);
				    setprop("/scenery/airport/jetway[2]/y-rotation-deg", interpolateTable(yrotatetable, position) * yrotate);
				    setprop("/scenery/airport/jetway[2]/z-rotation-deg", interpolateTable(zrotatetable, position) * zrotate);
				    setprop("/scenery/airport/jetway[2]/z-entrance-rotation-deg", interpolateTable(zentrancerotatetable, position) * zrotate);
				    setprop("/scenery/airport/jetway[2]/hood-x-rotation-deg", interpolateTable(hoodrotatetable, position) * hoodrotate);

				    if (position > 0 and !props.globals.getNode("/scenery/airport/jetway[2]/extended").getBoolValue())
				     {
				     settimer(loop, 0);
				     }
				    };
				   loop();
				   }
				  }
				 else
				  {
				  gui.popupTip("Cannot extend jetway: Your aircraft does not define the required positioning information.");
				  }
				]]></script>
			</binding>
		</action>
	</animation>

	<animation>
		<type>rotate</type>
		<object-name>Tunnel1Rotunda.002</object-name>
		<object-name>Tunnel1.002</object-name>
		<object-name>Tunnel2.002</object-name>
		<object-name>Tunnel3.002</object-name>
		<object-name>Rotunda2.002</object-name>
		<object-name>Entrance.002</object-name>
		<object-name>Hood.002</object-name>
		<property>/scenery/airport/jetway[2]/z-rotation-deg</property>
		<center>
			<x-m>18</x-m>
			<y-m>-10</y-m>
			<z-m>0</z-m>
		</center>
		<axis>
			<x>0</x>
			<y>0</y>
			<z>1</z>
		</axis>
	</animation>

	<animation>
		<type>translate</type>
		<object-name>Tunnel2.002</object-name>
		<object-name>Tunnel3.002</object-name>
		<object-name>Rotunda2.002</object-name>
		<object-name>Entrance.002</object-name>
		<object-name>Hood.002</object-name>
		<property>/scenery/airport/jetway[2]/x-translation-m</property>
		<axis>
			<x>1</x>
			<y>0</y>
			<z>0</z>
		</axis>
	</animation>

	<animation>
		<type>rotate</type>
		<object-name>Entrance.002</object-name>
		<object-name>Hood.002</object-name>
		<property>/scenery/airport/jetway[2]/z-entrance-rotation-deg</property>
		<center>
			<x-m>34.536</x-m>
			<y-m>-10.081</y-m>
			<z-m>0</z-m>
		</center>
		<axis>
			<x>0</x>
			<y>0</y>
			<z>-1</z>
		</axis>
	</animation>

	<animation>
		<type>rotate</type>
		<object-name>Tunnel1.002</object-name>
		<object-name>Tunnel2.002</object-name>
		<object-name>Rotunda2.002</object-name>
		<object-name>Entrance.002</object-name>
		<object-name>Hood.002</object-name>
		<property>/scenery/airport/jetway[2]/y-rotation-deg</property>
		<center>
			<x-m>19.5</x-m>
			<y-m>0</y-m>
			<z-m>6</z-m>
		</center>
		<axis>
			<x>0</x>
			<y>-1</y>
			<z>0</z>
		</axis>
	</animation>

	<animation>
		<type>rotate</type>
		<object-name>Hood.002</object-name>
		<property>/scenery/airport/jetway[2]/hood-x-rotation-deg</property>
		<center>
			<x-m>0</x-m>
			<y-m>-7.892</y-m>
			<z-m>5.852</z-m>
		</center>
		<axis>
			<x>1</x>
			<y>0</y>
			<z>0</z>
		</axis>
	</animation>

	<!-- Night/day lighting -->
	<animation>
		<type>textranslate</type>
		<object-name>Rotunda1</object-name>
		<object-name>Rotunda1.001</object-name>
		<object-name>Rotunda1.002</object-name>
		<object-name>Tunnel1Rotunda</object-name>
		<object-name>Tunnel1Rotunda.001</object-name>
		<object-name>Tunnel1Rotunda.002</object-name>
		<object-name>Tunnel1</object-name>
		<object-name>Tunnel1.001</object-name>
		<object-name>Tunnel1.002</object-name>
		<object-name>Tunnel2</object-name>
		<object-name>Tunnel2.001</object-name>
		<object-name>Tunnel2.002</object-name>
		<object-name>Tunnel3</object-name>
		<object-name>Tunnel3.001</object-name>
		<object-name>Tunnel3.002</object-name>
		<object-name>Rotunda2</object-name>
		<object-name>Rotunda2.001</object-name>
		<object-name>Rotunda2.002</object-name>
		<object-name>Entrance</object-name>
		<object-name>Entrance.001</object-name>
		<object-name>Entrance.002</object-name>
		<object-name>Hood</object-name>
		<object-name>Hood.001</object-name>
		<object-name>Hood.002</object-name>
		<property>/sim/time/sun-angle-rad</property>
		<factor>0.3125</factor>
		<step>1.6</step>
		<axis>
			<x>1</x>
			<y>0</y>
		</axis>
	</animation>

	<!-- Make the ground marker and jetway entrances "non-solid" so that the aircraft does not collide with them -->
	<animation>
		<object-name>Marker</object-name>
		<object-name>Entrance</object-name>
		<object-name>Entrance.001</object-name>
		<object-name>Entrance.002</object-name>
		<object-name>Hood</object-name>
		<object-name>Hood.001</object-name>
		<object-name>Hood.002</object-name>
		<enable-hot type="bool">false</enable-hot>
	</animation>

</PropertyList>