## garmin 196 functions
var last_time = 0.0;
var last_bearing = -1;
var tab_chiffres_lettres = ["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"];
var old_status = -1;

var init_variables = func{
	##version
	props.globals.getNode("/instrumentation/garmin196/version",1).setValue("JeeP v. 18/03/2012");

	##routes
	props.globals.getNode("/instrumentation/garmin196/menu_routes/search/x_char",1).setIntValue(0);
	props.globals.getNode("/instrumentation/garmin196/menu_routes/search/y_char",1).setIntValue(0);
	props.globals.getNode("/instrumentation/garmin196/menu_routes/fpl-loaded",1).setBoolValue(0);
	props.globals.getNode("/instrumentation/garmin196/menu_routes/waypoint-jump",1).setBoolValue(0);

	##points
	props.globals.getNode("/instrumentation/garmin196/menu_points/x_char",1).setIntValue(0);
	props.globals.getNode("/instrumentation/garmin196/menu_points/y_char",1).setIntValue(0);
	
	##aircrafts
	props.globals.getNode("/instrumentation/garmin196/menu_aircraft/x_char",1).setIntValue(0);
	props.globals.getNode("/instrumentation/garmin196/menu_aircraft/y_char",1).setIntValue(0);
		
	##load atis freq
	fgcommand("loadxml", props.Node.new({ filename: getprop("/sim/fg-root")~"/Aircraft/Instruments-3d/garmin196/airports_atis.xml", targetnode: "/instrumentation/garmin196" }));
	
	##init waypoint system
	props.globals.getNode("/instrumentation/garmin196/panel-wpt-bearing",1).setDoubleValue(0);
	props.globals.getNode("/instrumentation/garmin196/position-wpt-bearing",1).setDoubleValue(0);
	props.globals.getNode("/instrumentation/garmin196/panel-wpt-id",1).setValue("------");
	props.globals.getNode("/instrumentation/gps/config/drive-autopilot",1).setBoolValue(0); ##pour ne pas interferer avec l'autopilot

	##init map system
	props.globals.getNode("/instrumentation/garmin196/map-range",1).setDoubleValue(0.125);
	
	##init dto system
	props.globals.getNode("/instrumentation/garmin196/dto_display/x_char",1).setIntValue(0);
	props.globals.getNode("/instrumentation/garmin196/dto_display/y_char",1).setIntValue(0);
	
	##init saveable variables
	props.globals.getNode("/instrumentation/garmin196/antenne-deg",1).setDoubleValue(30);
	props.globals.getNode("/instrumentation/garmin196/light",1).setDoubleValue(30);
	props.globals.getNode("/instrumentation/garmin196/max-speed",1).setDoubleValue(150);
	props.globals.getNode("/instrumentation/garmin196/cruise-speed",1).setDoubleValue(120);
	props.globals.getNode("/instrumentation/garmin196/fuel-flow",1).setDoubleValue(5);
	props.globals.getNode("/instrumentation/garmin196/no_aircraft",1).setIntValue(0);
	props.globals.getNode("/instrumentation/garmin196/symbols/params/airport",1).setBoolValue(1);
	props.globals.getNode("/instrumentation/garmin196/symbols/params/vor",1).setBoolValue(1);
	props.globals.getNode("/instrumentation/garmin196/symbols/params/ndb",1).setBoolValue(1);
	props.globals.getNode("/instrumentation/garmin196/symbols/params/fix",1).setBoolValue(1);
	props.globals.getNode("/instrumentation/garmin196/symbols/params/twn",1).setBoolValue(1);
	props.globals.getNode("/instrumentation/garmin196/symbols/params/wpt",1).setBoolValue(1);
	
	props.globals.getNode("/instrumentation/garmin196/params/units/distance",1).setIntValue(1);
	props.globals.getNode("/instrumentation/garmin196/params/units/speed",1).setIntValue(1);
	props.globals.getNode("/instrumentation/garmin196/params/units/vert-speed",1).setIntValue(1);
	props.globals.getNode("/instrumentation/garmin196/params/units/altitude",1).setIntValue(1);
	props.globals.getNode("/instrumentation/garmin196/params/units/pressure",1).setIntValue(1);
	props.globals.getNode("/instrumentation/garmin196/params/units/temperature",1).setIntValue(1);
	
	props.globals.getNode("/instrumentation/garmin196/params/filtrage",1).setBoolValue(0);
	props.globals.getNode("/instrumentation/garmin196/params/vnav-indicator",1).setBoolValue(1);
	
	##status du gps
	#0 eteint
	#1 startup page
	#1x map page
	#2x panel page
	#3x position page
	#50 coffee page 
	#menus
	#100 = menu gps
	#110 = menu flights
	#120 = menu route
	#130 = menu points
	#140 = menu aircraft
	#150 = menu e6b
	#160 = menu map
	#170 = menu setup
	props.globals.getNode("/instrumentation/garmin196/status",1).setIntValue(0);
	
	##popup windows
	#0 = pas de popup
	#1 = affichage du reglage de la lumiere
	#10,11,12 = dto aviation
	#20 = dto recent
	#30 = dto user
	#40 = nrst airport
	#50 = nrst vor
	#60 = nrst ndb
	#70 = nrst fix
	#80 = nrst cities

	props.globals.getNode("/instrumentation/garmin196/popup_status",1).setIntValue(0);
	
	props.globals.getNode("/instrumentation/garmin196/serviceable",1).setBoolValue(0);
	props.globals.getNode("/instrumentation/garmin196/light",1).setDoubleValue(0);
	props.globals.getNode("/instrumentation/garmin196/coffee",1).setIntValue(0);
	
	load_cities();
	main_loop();
}
setlistener("/sim/signals/fdm-initialized",init_variables,0,0);

var load_parameters = func{
	fgcommand("loadxml", props.Node.new({ filename: getprop("/sim/fg-home")~"/aircraft-data/garmin196.xml", targetnode: "/instrumentation/garmin196/save" }));
	
	if(getprop("/instrumentation/garmin196/save/antenne-deg")!=nil){
		setprop("/instrumentation/garmin196/antenne-deg",getprop("/instrumentation/garmin196/save/antenne-deg"));
	}
	if(getprop("/instrumentation/garmin196/save/light")!=nil){
		setprop("/instrumentation/garmin196/light",getprop("/instrumentation/garmin196/save/light"));
	}
	if(getprop("/instrumentation/garmin196/save/max-speed")!=nil){
		setprop("/instrumentation/garmin196/max-speed",getprop("/instrumentation/garmin196/save/max-speed"));
	}
	if(getprop("/instrumentation/garmin196/save/cruise-speed")!=nil){
		setprop("/instrumentation/garmin196/cruise-speed",getprop("/instrumentation/garmin196/save/cruise-speed"));
	}
	if(getprop("/instrumentation/garmin196/save/fuel-flow")!=nil){
		setprop("/instrumentation/garmin196/fuel-flow",getprop("/instrumentation/garmin196/save/fuel-flow"));
	}
	if(getprop("/instrumentation/garmin196/save/no_aircraft")!=nil){
		setprop("/instrumentation/garmin196/no_aircraft",getprop("/instrumentation/garmin196/save/no_aircraft"));
	}
	if(getprop("/instrumentation/garmin196/save/symbols/params/airport")!=nil){
		setprop("/instrumentation/garmin196/symbols/params/airport",getprop("/instrumentation/garmin196/save/symbols/params/airport"));
	}
	if(getprop("/instrumentation/garmin196/save/symbols/params/vor")!=nil){
		setprop("/instrumentation/garmin196/symbols/params/vor",getprop("/instrumentation/garmin196/save/symbols/params/vor"));
	}
	if(getprop("/instrumentation/garmin196/save/symbols/params/ndb")!=nil){
		setprop("/instrumentation/garmin196/symbols/params/ndb",getprop("/instrumentation/garmin196/save/symbols/params/ndb"));
	}
	if(getprop("/instrumentation/garmin196/save/symbols/params/fix")!=nil){
		setprop("/instrumentation/garmin196/symbols/params/fix",getprop("/instrumentation/garmin196/save/symbols/params/fix"));
	}
	if(getprop("/instrumentation/garmin196/save/symbols/params/twn")!=nil){
		setprop("/instrumentation/garmin196/symbols/params/twn",getprop("/instrumentation/garmin196/save/symbols/params/twn"));
	}
	if(getprop("/instrumentation/garmin196/save/symbols/params/wpt")!=nil){
		setprop("/instrumentation/garmin196/symbols/params/wpt",getprop("/instrumentation/garmin196/save/symbols/params/wpt"));
	}
	
	if(getprop("/instrumentation/garmin196/save/params/units/distance")!=nil){
		setprop("/instrumentation/garmin196/params/units/distance",getprop("/instrumentation/garmin196/save/params/units/distance"));
	}
	if(getprop("/instrumentation/garmin196/save/params/units/speed")!=nil){
		setprop("/instrumentation/garmin196/params/units/speed",getprop("/instrumentation/garmin196/save/params/units/speed"));
	}
	if(getprop("/instrumentation/garmin196/save/params/units/vert-speed")!=nil){
		setprop("/instrumentation/garmin196/params/units/vert-speed",getprop("/instrumentation/garmin196/save/params/units/vert-speed"));
	}
	if(getprop("/instrumentation/garmin196/save/params/units/altitude")!=nil){
		setprop("/instrumentation/garmin196/params/units/altitude",getprop("/instrumentation/garmin196/save/params/units/altitude"));
	}
	if(getprop("/instrumentation/garmin196/save/params/units/pressure")!=nil){
		setprop("/instrumentation/garmin196/params/units/pressure",getprop("/instrumentation/garmin196/save/params/units/pressure"));
	}
	if(getprop("/instrumentation/garmin196/save/params/units/temperature")!=nil){
		setprop("/instrumentation/garmin196/params/units/temperature",getprop("/instrumentation/garmin196/save/params/units/temperature"));
	}
	if(getprop("/instrumentation/garmin196/save/params/filtrage")!=nil){
		setprop("/instrumentation/garmin196/params/filtrage",getprop("/instrumentation/garmin196/save/params/filtrage"));
	}
	if(getprop("/instrumentation/garmin196/save/params/vnav-indicator")!=nil){
		setprop("/instrumentation/garmin196/params/vnav-indicator",getprop("/instrumentation/garmin196/save/params/vnav-indicator"));
	}
	
	for(var i=0;i<5;i=i+1){
		if(getprop("/instrumentation/garmin196/save/waypoints/recent/wpt["~i~"]/id")!=nil){
			props.globals.getNode("/instrumentation/garmin196/waypoints/recent/wpt["~i~"]/id",1).setValue(getprop("/instrumentation/garmin196/save/waypoints/recent/wpt["~i~"]/id"));
			props.globals.getNode("/instrumentation/garmin196/waypoints/recent/wpt["~i~"]/type",1).setValue(getprop("/instrumentation/garmin196/save/waypoints/recent/wpt["~i~"]/type"));
		}
	}
	
	for(var i=0;i<5;i=i+1){
		if(getprop("/instrumentation/garmin196/save/waypoints/user/wpt["~i~"]/id")!=nil){
			props.globals.getNode("/instrumentation/garmin196/waypoints/user/wpt["~i~"]/id",1).setValue(getprop("/instrumentation/garmin196/save/waypoints/user/wpt["~i~"]/id"));
			props.globals.getNode("/instrumentation/garmin196/waypoints/user/wpt["~i~"]/latitude",1).setDoubleValue(getprop("/instrumentation/garmin196/save/waypoints/user/wpt["~i~"]/latitude"));
			props.globals.getNode("/instrumentation/garmin196/waypoints/user/wpt["~i~"]/longitude",1).setDoubleValue(getprop("/instrumentation/garmin196/save/waypoints/user/wpt["~i~"]/longitude"));
			props.globals.getNode("/instrumentation/gps/scratch/longitude-deg", 1).setDoubleValue(getprop("/instrumentation/garmin196/waypoints/user/wpt["~i~"]/longitude"));
			props.globals.getNode("/instrumentation/gps/scratch/latitude-deg", 1).setDoubleValue(getprop("/instrumentation/garmin196/waypoints/user/wpt["~i~"]/latitude"));
			props.globals.getNode("/instrumentation/gps/scratch/ident",1).setValue(getprop("/instrumentation/garmin196/waypoints/user/wpt["~i~"]/id")~"WPTUSR");
			setprop("/instrumentation/gps/command","define-user-wpt");
		}
	}
	
	for(var i=0;i<6;i=i+1){
		if(getprop("/instrumentation/garmin196/save/params/aircrafts/aircraft["~i~"]/name")!=nil){
			props.globals.getNode("/instrumentation/garmin196/params/aircrafts/aircraft["~i~"]/name",1).setValue(getprop("/instrumentation/garmin196/save/params/aircrafts/aircraft["~i~"]/name"));
			props.globals.getNode("/instrumentation/garmin196/params/aircrafts/aircraft["~i~"]/max-speed",1).setIntValue(getprop("/instrumentation/garmin196/save/params/aircrafts/aircraft["~i~"]/max-speed"));
			props.globals.getNode("/instrumentation/garmin196/params/aircrafts/aircraft["~i~"]/cruise-speed",1).setIntValue(getprop("/instrumentation/garmin196/save/params/aircrafts/aircraft["~i~"]/cruise-speed"));
			props.globals.getNode("/instrumentation/garmin196/params/aircrafts/aircraft["~i~"]/fuel-flow",1).setDoubleValue(getprop("/instrumentation/garmin196/save/params/aircrafts/aircraft["~i~"]/fuel-flow"));
		}
	}
	
	for(var i=0;i<9;i=i+1){
		if(getprop("/instrumentation/garmin196/save/flights/flight["~i~"]/start")!=nil){
			props.globals.getNode("/instrumentation/garmin196/flights/flight["~i~"]/start",1).setValue(getprop("/instrumentation/garmin196/save/flights/flight["~i~"]/start"));
			props.globals.getNode("/instrumentation/garmin196/flights/flight["~i~"]/end",1).setValue(getprop("/instrumentation/garmin196/save/flights/flight["~i~"]/end"));
			props.globals.getNode("/instrumentation/garmin196/flights/flight["~i~"]/date",1).setValue(getprop("/instrumentation/garmin196/save/flights/flight["~i~"]/date"));
			props.globals.getNode("/instrumentation/garmin196/flights/flight["~i~"]/aircraft",1).setValue(getprop("/instrumentation/garmin196/save/flights/flight["~i~"]/aircraft"));
			props.globals.getNode("/instrumentation/garmin196/flights/flight["~i~"]/distance",1).setDoubleValue(getprop("/instrumentation/garmin196/save/flights/flight["~i~"]/distance"));
			props.globals.getNode("/instrumentation/garmin196/flights/flight["~i~"]/duration",1).setDoubleValue(getprop("/instrumentation/garmin196/save/flights/flight["~i~"]/duration"));
		}
	}
	
	for(var i=0;i<11;i=i+1){
		if(getprop("/instrumentation/garmin196/save/routes/route["~i~"]/name")!=nil){
			props.globals.getNode("/instrumentation/garmin196/routes/route["~i~"]/name",1).setValue(getprop("/instrumentation/garmin196/save/routes/route["~i~"]/name"));
			for(var j=0;j<10;j=j+1){
				if(getprop("/instrumentation/garmin196/save/routes/route["~i~"]/wpts/wpt["~j~"]/id")!=nil){
					props.globals.getNode("/instrumentation/garmin196/routes/route["~i~"]/wpts/wpt["~j~"]/id",1).setValue(getprop("/instrumentation/garmin196/save/routes/route["~i~"]/wpts/wpt["~j~"]/id"));
					props.globals.getNode("/instrumentation/garmin196/routes/route["~i~"]/wpts/wpt["~j~"]/type",1).setValue(getprop("/instrumentation/garmin196/save/routes/route["~i~"]/wpts/wpt["~j~"]/type"));
				}
			}
		}
	}
}
setlistener("/sim/signals/fdm-initialized",load_parameters);

var save_parameters = func{
		props.globals.getNode("/instrumentation/garmin196/save").remove();

		##preparation
		if(getprop("/instrumentation/garmin196/antenne-deg")!=nil){
			props.globals.getNode("/instrumentation/garmin196/save/antenne-deg",1).setDoubleValue(getprop("/instrumentation/garmin196/antenne-deg"));
		}
		if(getprop("/instrumentation/garmin196/light")!=nil){
			props.globals.getNode("/instrumentation/garmin196/save/light",1).setDoubleValue(getprop("/instrumentation/garmin196/light"));
		}
		if(getprop("/instrumentation/garmin196/max-speed")!=nil){
			props.globals.getNode("/instrumentation/garmin196/save/max-speed",1).setDoubleValue(getprop("/instrumentation/garmin196/max-speed"));
		}
		if(getprop("/instrumentation/garmin196/cruise-speed")!=nil){
			props.globals.getNode("/instrumentation/garmin196/save/cruise-speed",1).setDoubleValue(getprop("/instrumentation/garmin196/cruise-speed"));
		}
		if(getprop("/instrumentation/garmin196/fuel-flow")!=nil){
			props.globals.getNode("/instrumentation/garmin196/save/fuel-flow",1).setDoubleValue(getprop("/instrumentation/garmin196/fuel-flow"));
		}
		if(getprop("/instrumentation/garmin196/no_aircraft")!=nil){
			props.globals.getNode("/instrumentation/garmin196/save/no_aircraft",1).setDoubleValue(getprop("/instrumentation/garmin196/no_aircraft"));
		}
		props.globals.getNode("/instrumentation/garmin196/save/symbols/params/airport",1).setDoubleValue(getprop("/instrumentation/garmin196/symbols/params/airport"));
		props.globals.getNode("/instrumentation/garmin196/save/symbols/params/vor",1).setBoolValue(getprop("/instrumentation/garmin196/symbols/params/vor"));
		props.globals.getNode("/instrumentation/garmin196/save/symbols/params/ndb",1).setBoolValue(getprop("/instrumentation/garmin196/symbols/params/ndb"));
		props.globals.getNode("/instrumentation/garmin196/save/symbols/params/fix",1).setBoolValue(getprop("/instrumentation/garmin196/symbols/params/fix"));
		props.globals.getNode("/instrumentation/garmin196/save/symbols/params/twn",1).setBoolValue(getprop("/instrumentation/garmin196/symbols/params/twn"));
		props.globals.getNode("/instrumentation/garmin196/save/symbols/params/wpt",1).setBoolValue(getprop("/instrumentation/garmin196/symbols/params/wpt"));
		
		props.globals.getNode("/instrumentation/garmin196/save/params/units/distance",1).setIntValue(getprop("/instrumentation/garmin196/params/units/distance"));
		props.globals.getNode("/instrumentation/garmin196/save/params/units/speed",1).setIntValue(getprop("/instrumentation/garmin196/params/units/speed"));
		props.globals.getNode("/instrumentation/garmin196/save/params/units/vert-speed",1).setIntValue(getprop("/instrumentation/garmin196/params/units/vert-speed"));
		props.globals.getNode("/instrumentation/garmin196/save/params/units/altitude",1).setIntValue(getprop("/instrumentation/garmin196/params/units/altitude"));
		props.globals.getNode("/instrumentation/garmin196/save/params/units/pressure",1).setIntValue(getprop("/instrumentation/garmin196/params/units/pressure"));
		props.globals.getNode("/instrumentation/garmin196/save/params/units/temperature",1).setIntValue(getprop("/instrumentation/garmin196/params/units/temperature"));
		props.globals.getNode("/instrumentation/garmin196/save/params/filtrage",1).setBoolValue(getprop("/instrumentation/garmin196/params/filtrage"));
		props.globals.getNode("/instrumentation/garmin196/save/params/vnav-indicator",1).setBoolValue(getprop("/instrumentation/garmin196/params/vnav-indicator"));
		
		for(var i=0;i<5;i=i+1){
			if(getprop("/instrumentation/garmin196/waypoints/recent/wpt["~i~"]/id")!=nil){
				props.globals.getNode("/instrumentation/garmin196/save/waypoints/recent/wpt["~i~"]/id",1).setValue(getprop("/instrumentation/garmin196/waypoints/recent/wpt["~i~"]/id"));
				props.globals.getNode("/instrumentation/garmin196/save/waypoints/recent/wpt["~i~"]/type",1).setValue(getprop("/instrumentation/garmin196/waypoints/recent/wpt["~i~"]/type"));
			}
		}
		
		for(var i=0;i<9;i=i+1){
			if(getprop("/instrumentation/garmin196/waypoints/user/wpt["~i~"]/id")!=nil){
				props.globals.getNode("/instrumentation/garmin196/save/waypoints/user/wpt["~i~"]/id",1).setValue(getprop("/instrumentation/garmin196/waypoints/user/wpt["~i~"]/id"));
				props.globals.getNode("/instrumentation/garmin196/save/waypoints/user/wpt["~i~"]/latitude",1).setValue(getprop("/instrumentation/garmin196/waypoints/user/wpt["~i~"]/latitude"));
				props.globals.getNode("/instrumentation/garmin196/save/waypoints/user/wpt["~i~"]/longitude",1).setValue(getprop("/instrumentation/garmin196/waypoints/user/wpt["~i~"]/longitude"));
			}
		}
		
		for(var i=0;i<6;i=i+1){
			if(getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~i~"]/name")!=nil){
				props.globals.getNode("/instrumentation/garmin196/save/params/aircrafts/aircraft["~i~"]/name",1).setValue(getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~i~"]/name"));
				props.globals.getNode("/instrumentation/garmin196/save/params/aircrafts/aircraft["~i~"]/max-speed",1).setIntValue(getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~i~"]/max-speed"));
				props.globals.getNode("/instrumentation/garmin196/save/params/aircrafts/aircraft["~i~"]/cruise-speed",1).setIntValue(getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~i~"]/cruise-speed"));
				props.globals.getNode("/instrumentation/garmin196/save/params/aircrafts/aircraft["~i~"]/fuel-flow",1).setDoubleValue(getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~i~"]/fuel-flow"));
			}
		}
		for(var i=0;i<8;i=i+1){
			if(getprop("/instrumentation/garmin196/flights/flight["~i~"]/start")!=nil){
				props.globals.getNode("/instrumentation/garmin196/save/flights/flight["~i~"]/start",1).setValue(getprop("/instrumentation/garmin196/flights/flight["~i~"]/start"));
				props.globals.getNode("/instrumentation/garmin196/save/flights/flight["~i~"]/end",1).setValue(getprop("/instrumentation/garmin196/flights/flight["~i~"]/end"));
				props.globals.getNode("/instrumentation/garmin196/save/flights/flight["~i~"]/date",1).setValue(getprop("/instrumentation/garmin196/flights/flight["~i~"]/date"));
				props.globals.getNode("/instrumentation/garmin196/save/flights/flight["~i~"]/aircraft",1).setValue(getprop("/instrumentation/garmin196/flights/flight["~i~"]/aircraft"));
				props.globals.getNode("/instrumentation/garmin196/save/flights/flight["~i~"]/distance",1).setDoubleValue(getprop("/instrumentation/garmin196/flights/flight["~i~"]/distance"));
				props.globals.getNode("/instrumentation/garmin196/save/flights/flight["~i~"]/duration",1).setDoubleValue(getprop("/instrumentation/garmin196/flights/flight["~i~"]/duration"));
			}
		}
		for(var i=0;i<11;i=i+1){
			if(getprop("/instrumentation/garmin196/routes/route["~i~"]/name")!=nil){
				props.globals.getNode("/instrumentation/garmin196/save/routes/route["~i~"]/name",1).setValue(getprop("/instrumentation/garmin196/routes/route["~i~"]/name"));
				for(var j=0;j<10;j=j+1){
					if(getprop("/instrumentation/garmin196/routes/route["~i~"]/wpts/wpt["~j~"]/id")!=nil){
						props.globals.getNode("/instrumentation/garmin196/save/routes/route["~i~"]/wpts/wpt["~j~"]/id",1).setValue(getprop("/instrumentation/garmin196/routes/route["~i~"]/wpts/wpt["~j~"]/id"));
						props.globals.getNode("/instrumentation/garmin196/save/routes/route["~i~"]/wpts/wpt["~j~"]/type",1).setValue(getprop("/instrumentation/garmin196/routes/route["~i~"]/wpts/wpt["~j~"]/type"));
					}
				}
			}
		}
		##delete file before saving to delete keys
		var file = io.open(getprop("/sim/fg-home")~"/aircraft-data/garmin196.xml", mode="w");
		io.write(file,"");
		io.close(file);
		fgcommand("savexml", props.Node.new({ filename: getprop("/sim/fg-home")~"/aircraft-data/garmin196.xml", sourcenode: "/instrumentation/garmin196/save" }));
}

var main_loop = func{
	var time = getprop("/sim/time/elapsed-sec");
    var dt = time - last_time;
    last_time = time;
	
	calcul_turn_rate(dt);
	change_speed_display();
	change_position_wpt_bug();
	update_flight();
	update_e6b_menu();

	settimer(main_loop, 0.3);
}

var nyi = func (x) { gui.popupTip(x ~ ": not yet implemented", 3); }

var power = func (x){
	var serviceable = getprop("/instrumentation/garmin196/serviceable");
	if(x==0){
		if(serviceable==1){
			setprop("/instrumentation/garmin196/serviceable",0);
			setprop("/instrumentation/garmin196/status",0);
			setprop("/instrumentation/garmin196/popup_status",0);
		}else{
			setprop("/instrumentation/garmin196/serviceable",1);
			setprop("/instrumentation/garmin196/status",1);
		}
	}
	
	if(x==1 and serviceable==1){
		setprop("/instrumentation/garmin196/popup_status",1)
	}

}

var in = func (x){
	var serviceable = getprop("/instrumentation/garmin196/serviceable");
	if(serviceable==1){
		var status = getprop("/instrumentation/garmin196/status");
		if(x==0){
			##traitement des pages
			if(status==10){
				var range = getprop("/instrumentation/garmin196/map-range");
				range = range / 2;
				if(range<0.125){
					range = 0.125;
				}
				setprop("/instrumentation/garmin196/map-range",range);
				return;
			}
		}elsif(x==1){
			if(getprop("/instrumentation/garmin196/coffee")==2 and status>=10){
				setprop("/instrumentation/garmin196/coffee",0);
				setprop("/instrumentation/garmin196/status",50);
			}
		}
	}
}

var out = func (x){
	var serviceable = getprop("/instrumentation/garmin196/serviceable");
	if(serviceable==1){
		var status = getprop("/instrumentation/garmin196/status");
		if(x==0){
			##traitement des pages
			if(status==10){
				var range = getprop("/instrumentation/garmin196/map-range");
				range = range * 2;
				if(range>32){
					range = 32;
				}
				setprop("/instrumentation/garmin196/map-range",range);
				return;
			}
		}elsif(x==1){
			if(getprop("/instrumentation/garmin196/coffee")==1 and status>=10){
				setprop("/instrumentation/garmin196/coffee",2);
			}
		}
	}
}

var page = func (x){
	var serviceable = getprop("/instrumentation/garmin196/serviceable");
	if(serviceable==1){
		var status = getprop("/instrumentation/garmin196/status");
		if(x==0){
			##traitement des pages
			if(status==10){
				setprop("/instrumentation/garmin196/status",20);
				return;
			}
			
			if(status==20){
				setprop("/instrumentation/garmin196/status",30);
				return;
			}
			
			if(status==30){
				setprop("/instrumentation/garmin196/status",10);
				update_map();
				return;
			}
			
			if(status==50){
				setprop("/instrumentation/garmin196/status",10);
				update_map();
				return;
			}
		}elsif(x==1){
			if(getprop("/instrumentation/garmin196/coffee")==0 and status>=10){
				setprop("/instrumentation/garmin196/coffee",1);
			}
		}
	}
}

var quit = func (x){
	var serviceable = getprop("/instrumentation/garmin196/serviceable");
	if(serviceable==1){
		if(x==0){
			#traitement des popup
			var popup_status = getprop("/instrumentation/garmin196/popup_status");
			if(popup_status==1){
				setprop("/instrumentation/garmin196/popup_status",0);
				save_parameters();
				return;
			}
			if(popup_status>=10 and popup_status<=99){
				setprop("/instrumentation/garmin196/popup_status",0);
				return;
			}
			
			##traitement des pages
			var status = getprop("/instrumentation/garmin196/status");
			if(status==10){
				setprop("/instrumentation/garmin196/status",30);
				return;
			}
			
			if(status==20){
				setprop("/instrumentation/garmin196/status",10);
				update_map();
				return;
			}
			
			if(status==30){
				setprop("/instrumentation/garmin196/status",20);
				return;
			}
			
			if(status==50){
				setprop("/instrumentation/garmin196/status",10);
				update_map();
				return;
			}
			
			if(status==111){
				setprop("/instrumentation/garmin196/status",110);
				setprop("/instrumentation/garmin196/menu_flights/no_ligne_selected",-1);
				return;
			}
			
			if(status==112){
				setprop("/instrumentation/garmin196/status",111);
				return;
			}
			
			##menu routes
			if(status==121){
				setprop("/instrumentation/garmin196/status",120);
				setprop("/instrumentation/garmin196/menu_routes/no_ligne_selected",-1);
				return;
			}
			
			if(status==122){
				setprop("/instrumentation/garmin196/status",121);
				save_parameters();
				return;
			}
			
			if(status==123){
				setprop("/instrumentation/garmin196/status",122);
				return;
			}
			
			if(status==124){
				setprop("/instrumentation/garmin196/status",123);
				return;
			}
			
			##menu points
			if(status==131){
				setprop("/instrumentation/garmin196/status",130);
				setprop("/instrumentation/garmin196/menu_points/no_ligne_selected",-1);
				init_list_points();
				return;
			}
			
			if(status==132){
				setprop("/instrumentation/garmin196/status",131);
				return;
			}
			
			if(status==133){
				setprop("/instrumentation/garmin196/status",132);
				return;
			}
			
			if(status==134){
				setprop("/instrumentation/garmin196/status",133);
				return;
			}
			
			if(status==135){
				setprop("/instrumentation/garmin196/status",134);
				return;
			}
			
			if(status==136){
				setprop("/instrumentation/garmin196/status",135);
				return;
			}
			
			##menu aircraft
			if(status==141){
				setprop("/instrumentation/garmin196/status",140);
				setprop("/instrumentation/garmin196/menu_aircraft/no_ligne_selected",-1);
				init_list_aircraft();
				display_list_aircraft();
				return;
			}
			
			if(status==142){
				setprop("/instrumentation/garmin196/status",141);
				display_list_aircraft();
				return;
			}
			
			if(status==143){
				setprop("/instrumentation/garmin196/status",142);
				return;
			}
			
			if(status==144){
				setprop("/instrumentation/garmin196/status",143);
				return;
			}
			
			if(status==145){
				setprop("/instrumentation/garmin196/status",144);
				return;
			}
			
			##menu map
			if(status==161){
				setprop("/instrumentation/garmin196/status",160);
				setprop("/instrumentation/garmin196/menu_map/no_ligne_selected",-1);
				return;
			}
			
			##menu setup
			if(status==171){
				setprop("/instrumentation/garmin196/status",170);
				setprop("/instrumentation/garmin196/menu_setup/no_ligne_selected",-1);
				return;
			}
			
			if(status==176){
				setprop("/instrumentation/garmin196/status",175);
				setprop("/instrumentation/garmin196/menu_setup/no_ligne_selected",-1);
				return;
			}
			
			if(status>=100 and status <180){
				if(old_status>=10){
					status = old_status;
				}else{
					status = 10;
				}
				setprop("/instrumentation/garmin196/status",status);
				if(status==10){
					update_map();
				}
				return;
			}
		}
	}
}

var enter = func (x){
	var serviceable = getprop("/instrumentation/garmin196/serviceable");
	if(serviceable==1){
		if(x==0){
			#traitement des popup
			var popup_status = getprop("/instrumentation/garmin196/popup_status");
			if(popup_status==1){
				setprop("/instrumentation/garmin196/popup_status",0);
				save_parameters();
				return;
			}
			
			if(popup_status==10){
				setprop("/instrumentation/garmin196/popup_status",11);
				display_dto_search();
				return;
			}
			
			if(popup_status==11){
				if(getprop("/instrumentation/garmin196/dto_display/max_ligne_selected")>=0){
					props.globals.getNode("/instrumentation/garmin196/dto_display/ligne[0]/selected",1).setBoolValue(1);
					setprop("/instrumentation/garmin196/popup_status",12);
					return;
				}
			}
			
			if(popup_status==12 or popup_status==30){
				setprop("/instrumentation/garmin196/popup_status",0);
				var id = getprop("/instrumentation/garmin196/dto_display/ligne["~getprop("/instrumentation/garmin196/dto_display/no_ligne_selected")~"]/id");
				var type = getprop("/instrumentation/garmin196/dto_display/ligne["~getprop("/instrumentation/garmin196/dto_display/no_ligne_selected")~"]/type");
				affectation_waypoint(id);
				##rolling recents waypoints
				var existe_deja = 0;
				for(var i=0;i<5;i=i+1){
					if(getprop("/instrumentation/garmin196/waypoints/recent/wpt["~i~"]/id")==id){
						existe_deja = 1;
						break;
					}
				}
				if(existe_deja==0){
					for(var i=4;i>0;i=i-1){
						if(getprop("/instrumentation/garmin196/waypoints/recent/wpt["~(i-1)~"]/id")){
							props.globals.getNode("/instrumentation/garmin196/waypoints/recent/wpt["~i~"]/id",1).setValue(getprop("/instrumentation/garmin196/waypoints/recent/wpt["~(i-1)~"]/id"));
							props.globals.getNode("/instrumentation/garmin196/waypoints/recent/wpt["~i~"]/type",1).setValue(getprop("/instrumentation/garmin196/waypoints/recent/wpt["~(i-1)~"]/type"));
						}
					}
					props.globals.getNode("/instrumentation/garmin196/waypoints/recent/wpt[0]/id",1).setValue(id);
					props.globals.getNode("/instrumentation/garmin196/waypoints/recent/wpt[0]/type",1).setValue(type);
					save_parameters();
				}
				return;
			}
			
			if(popup_status==20){
				setprop("/instrumentation/garmin196/popup_status",0);
				var id = getprop("/instrumentation/garmin196/dto_display/ligne["~getprop("/instrumentation/garmin196/dto_display/no_ligne_selected")~"]/id");
				var type = getprop("/instrumentation/garmin196/dto_display/ligne["~getprop("/instrumentation/garmin196/dto_display/no_ligne_selected")~"]/type");
				affectation_waypoint(id);
				return;
			}
			
			if(popup_status>30 and popup_status<=89){
				setprop("/instrumentation/garmin196/popup_status",0);
				var id = getprop("/instrumentation/garmin196/nrst_display/ligne["~getprop("/instrumentation/garmin196/nrst_display/no_ligne_selected")~"]/id");
				var type = getprop("/instrumentation/garmin196/nrst_display/ligne["~getprop("/instrumentation/garmin196/nrst_display/no_ligne_selected")~"]/type");
				affectation_waypoint(id);
				##rolling recents waypoints
				var existe_deja = 0;
				for(var i=0;i<5;i=i+1){
					if(getprop("/instrumentation/garmin196/waypoints/recent/wpt["~i~"]/id")==id){
						existe_deja = 1;
						break;
					}
				}
				if(existe_deja==0){
					for(var i=4;i>0;i=i-1){
						if(getprop("/instrumentation/garmin196/waypoints/recent/wpt["~(i-1)~"]/id")){
							props.globals.getNode("/instrumentation/garmin196/waypoints/recent/wpt["~i~"]/id",1).setValue(getprop("/instrumentation/garmin196/waypoints/recent/wpt["~(i-1)~"]/id"));
							props.globals.getNode("/instrumentation/garmin196/waypoints/recent/wpt["~i~"]/type",1).setValue(getprop("/instrumentation/garmin196/waypoints/recent/wpt["~(i-1)~"]/type"));
						}
					}
					props.globals.getNode("/instrumentation/garmin196/waypoints/recent/wpt[0]/id",1).setValue(id);
					props.globals.getNode("/instrumentation/garmin196/waypoints/recent/wpt[0]/type",1).setValue(type);
					save_parameters();
				}
				return;
			}
			
			##validation de la startup page
			var status = getprop("/instrumentation/garmin196/status");
			if(status==1){
				setprop("/instrumentation/garmin196/status",10);
				update_map();
				return;
			}
			
			if(status==110){
				if(getprop("/instrumentation/garmin196/menu_flights/max_ligne_selected")>=0){
					setprop("/instrumentation/garmin196/menu_flights/no_ligne_selected",0);
					setprop("/instrumentation/garmin196/status",111);
				}
				return;
			}
			
			if(status==111){
				update_menu_flights_detail();
				setprop("/instrumentation/garmin196/status",112);
				return;
			}
			
			if(status==112){
				setprop("/instrumentation/garmin196/status",111);
				return;
			}
			
			if(status==120){
				setprop("/instrumentation/garmin196/status",121);
				setprop("/instrumentation/garmin196/menu_routes/no_ligne_selected",0);
				return;
			}

			if(status==121){
				setprop("/instrumentation/garmin196/status",122);
				var no_ligne = getprop("/instrumentation/garmin196/menu_routes/no_ligne_selected");
				if(getprop("/instrumentation/garmin196/routes/route["~no_ligne~"]/name")==nil){
					init_new_route(no_ligne);
				}
				update_menu_routes_detail();
				setprop("/instrumentation/garmin196/menu_routes/no_ligne_detail",0);
				return;
			}

			if(status==122){
				setprop("/instrumentation/garmin196/status",123);
				var no_ligne_liste = getprop("/instrumentation/garmin196/menu_routes/no_ligne_selected");
				var no_ligne_detail = getprop("/instrumentation/garmin196/menu_routes/no_ligne_detail");
				if(getprop("/instrumentation/garmin196/routes/route["~no_ligne_liste~"]/wpts/wpt["~no_ligne_detail~"]/id")==nil){
					init_search_route("0");
				}else{
					init_search_route(getprop("/instrumentation/garmin196/routes/route["~no_ligne_liste~"]/wpts/wpt["~no_ligne_detail~"]/id"));
				}
				setprop("/instrumentation/garmin196/menu_routes/search/no_ligne_selected",-1);
				return;
			}
			
			if(status==123){
				if(getprop("/instrumentation/garmin196/menu_routes/search/max_ligne_selected")>=0){
					setprop("/instrumentation/garmin196/status",124);
					setprop("/instrumentation/garmin196/menu_routes/search/no_ligne_selected",0);
				}
				return;
			}
			
			if(status==124){
				validate_menu_search_routes();
				update_menu_routes_detail();
				init_menu_routes_list();
				setprop("/instrumentation/garmin196/status",122);
				return;
			}
			
			if(status==130){
				setprop("/instrumentation/garmin196/status",131);
				setprop("/instrumentation/garmin196/menu_points/no_ligne_selected",0);
				return;
			}

			if(status==131){
				setprop("/instrumentation/garmin196/status",132);
				var no_ligne = getprop("/instrumentation/garmin196/menu_points/no_ligne_selected");
				if(getprop("/instrumentation/garmin196/waypoints/user/wpt["~no_ligne~"]/id")==nil){
					init_new_point(no_ligne);
				}
				update_menu_points();
				return;
			}
			
			if(status==132){
				setprop("/instrumentation/garmin196/status",133);
				return;
			}
			
			if(status==133){
				setprop("/instrumentation/garmin196/status",134);
				return;
			}
			
			if(status==134){
				setprop("/instrumentation/garmin196/status",135);
				return;
			}
			
			if(status==135){
				setprop("/instrumentation/garmin196/status",136);
				return;
			}
			
			if(status==136){
				setprop("/instrumentation/garmin196/status",131);
				validate_menu_points();
				init_list_points();
				return;
			}
			
			if(status==140){
				setprop("/instrumentation/garmin196/status",141);
				setprop("/instrumentation/garmin196/menu_aircraft/no_ligne_selected",getprop("/instrumentation/garmin196/no_aircraft"));
				display_list_aircraft();
				return;
			}
			
			if(status==141){
				setprop("/instrumentation/garmin196/status",142);
				var no_ligne = getprop("/instrumentation/garmin196/menu_aircraft/no_ligne_selected");
				if(getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~no_ligne~"]/name")==nil){
					init_new_aircraft(no_ligne);
				}
				init_menu_aircraft();
				return;
			}
			
			if(status==142){
				setprop("/instrumentation/garmin196/status",143);
				return;
			}
			
			if(status==143){
				setprop("/instrumentation/garmin196/status",144);
				return;
			}
			
			if(status==144){
				setprop("/instrumentation/garmin196/status",145);
				return;
			}
			
			if(status==145){
				setprop("/instrumentation/garmin196/status",141);
				validate_menu_aircraft();
				init_list_aircraft();
				display_list_aircraft();
				return;
			}
			
			##menu map
			if(status==160){
				setprop("/instrumentation/garmin196/status",161);
				setprop("/instrumentation/garmin196/menu_map/no_ligne_selected",0);
				return;
			}
			
			if(status==161){
				var no_ligne = getprop("/instrumentation/garmin196/menu_map/no_ligne_selected");
				if(no_ligne==0){
					setprop("/instrumentation/garmin196/symbols/params/airport",(getprop("/instrumentation/garmin196/symbols/params/airport")==1 ? 0 : 1));
				}
				if(no_ligne==1){
					setprop("/instrumentation/garmin196/symbols/params/vor",(getprop("/instrumentation/garmin196/symbols/params/vor")==1 ? 0 : 1));
				}
				if(no_ligne==2){
					setprop("/instrumentation/garmin196/symbols/params/ndb",(getprop("/instrumentation/garmin196/symbols/params/ndb")==1 ? 0 : 1));
				}
				if(no_ligne==3){
					setprop("/instrumentation/garmin196/symbols/params/fix",(getprop("/instrumentation/garmin196/symbols/params/fix")==1 ? 0 : 1));
				}
				if(no_ligne==4){
					setprop("/instrumentation/garmin196/symbols/params/twn",(getprop("/instrumentation/garmin196/symbols/params/twn")==1 ? 0 : 1));
				}
				if(no_ligne==5){
					setprop("/instrumentation/garmin196/symbols/params/wpt",(getprop("/instrumentation/garmin196/symbols/params/wpt")==1 ? 0 : 1));
				}
				save_parameters();
				return;
			}
			
			##menu setup
			if(status==170){
				setprop("/instrumentation/garmin196/status",171);
				setprop("/instrumentation/garmin196/menu_setup/no_ligne_selected",0);
				return;
			}
			
			if(status==171){
				var no_ligne = getprop("/instrumentation/garmin196/menu_setup/no_ligne_selected");
				if(no_ligne==0){
					setprop("/instrumentation/garmin196/params/units/distance",(getprop("/instrumentation/garmin196/params/units/distance")==1 ? 2 : 1));
				}
				if(no_ligne==1){
					setprop("/instrumentation/garmin196/params/units/speed",(getprop("/instrumentation/garmin196/params/units/speed")==1 ? 2 : 1));
				}
				if(no_ligne==2){
					setprop("/instrumentation/garmin196/params/units/vert-speed",(getprop("/instrumentation/garmin196/params/units/vert-speed")==1 ? 2 : 1));
				}
				if(no_ligne==3){
					setprop("/instrumentation/garmin196/params/units/altitude",(getprop("/instrumentation/garmin196/params/units/altitude")==1 ? 2 : 1));
				}
				if(no_ligne==4){
					setprop("/instrumentation/garmin196/params/units/pressure",(getprop("/instrumentation/garmin196/params/units/pressure")==1 ? 2 : 1));
				}
				if(no_ligne==5){
					setprop("/instrumentation/garmin196/params/units/temperature",(getprop("/instrumentation/garmin196/params/units/temperature")==1 ? 2 : 1));
				}
				save_parameters();
				return;
			}
			
			if(status==175){
				setprop("/instrumentation/garmin196/status",176);
				setprop("/instrumentation/garmin196/menu_setup/no_ligne_selected",0);
				return;
			}
			if(status==176){
				var no_ligne = getprop("/instrumentation/garmin196/menu_setup/no_ligne_selected");
				if(no_ligne==0){
					setprop("/instrumentation/garmin196/params/filtrage",(getprop("/instrumentation/garmin196/params/filtrage")==0 ? 1 : 0));
				}
				if(no_ligne==1){
					setprop("/instrumentation/garmin196/params/vnav-indicator",(getprop("/instrumentation/garmin196/params/vnav-indicator")==0 ? 1 : 0));
				}
				save_parameters();
				return;
			}
			
		}elsif(x==1){
			#traitement des popup
			var popup_status = getprop("/instrumentation/garmin196/popup_status");
			var status = getprop("/instrumentation/garmin196/status");
			if(popup_status==0){##pas de popup
				if(status>=10 and status<=39){
					old_status = status;
					setprop("/instrumentation/garmin196/status",132);
					setprop("/instrumentation/garmin196/menu_points/no_ligne_selected",0);
					var points = props.globals.getNode("/instrumentation/garmin196/waypoints/user/",1).getChildren("wpt");
					for(var i=size(points)-1;i>=0;i=i-1){
						if(i<8){
							props.globals.getNode("/instrumentation/garmin196/waypoints/user/wpt["~(i+1)~"]/id",1).setValue(getprop("/instrumentation/garmin196/waypoints/user/wpt["~i~"]/id"));
							props.globals.getNode("/instrumentation/garmin196/waypoints/user/wpt["~(i+1)~"]/latitude",1).setValue(getprop("/instrumentation/garmin196/waypoints/user/wpt["~i~"]/latitude"));
							props.globals.getNode("/instrumentation/garmin196/waypoints/user/wpt["~(i+1)~"]/longitude",1).setValue(getprop("/instrumentation/garmin196/waypoints/user/wpt["~i~"]/longitude"));
						}
					}
					init_new_point(0);
					update_menu_points();
					#init_list_points();
				}
			}
		}
	}
}

var menu = func (x){
    var serviceable = getprop("/instrumentation/garmin196/serviceable");
	var status = getprop("/instrumentation/garmin196/status");
	if(serviceable==1){
		if(status>=10 and status<100){
			old_status = status;
			setprop("/instrumentation/garmin196/status",100);
			setprop("/instrumentation/garmin196/popup_status",0);
			
			##particularite map
			if(status==10){	
				setprop("/instrumentation/garmin196/status",160);
				setprop("/instrumentation/garmin196/menu_map/no_ligne_selected",-1);
			}
		}elsif(status>=100){
			if(old_status>=10){
				status = old_status;
			}else{
				status = 10;
			}
			setprop("/instrumentation/garmin196/status",status);
		}
	}
}

var nrst = func (x){
	var serviceable = getprop("/instrumentation/garmin196/serviceable");
	var status = getprop("/instrumentation/garmin196/status");
	if(serviceable==1 and status>1 and status<100){
		if(x==0){
			setprop("/instrumentation/garmin196/popup_status",40);
			display_nrst("airport");
		}
	}
}

var dto = func (x){
	var serviceable = getprop("/instrumentation/garmin196/serviceable");
	var status = getprop("/instrumentation/garmin196/status");
	if(serviceable==1 and status>1 and status<100){
		if(x==0){
			setprop("/instrumentation/garmin196/popup_status",10);
			setprop("/instrumentation/garmin196/dto_display/ligne_select","Press Enter to search");
			init_dto_display();
			setprop("/instrumentation/garmin196/dto_display/x_char",0);
			setprop("/instrumentation/garmin196/dto_display/y_char",0);
		}
	}
}

var rockerup = func (x){
	var serviceable = getprop("/instrumentation/garmin196/serviceable");
	if(serviceable==1){
		if(x==0){
			#traitement des popup
			var popup_status = getprop("/instrumentation/garmin196/popup_status");
			
			if(popup_status==1){
				var light_level = getprop("/instrumentation/garmin196/light");
				light_level = light_level + 0.1;
				if(light_level>1){
					light_level = 1;
				}
				setprop("/instrumentation/garmin196/light",light_level);
				return;
			}
			
			if(popup_status==11){
				var y_char = getprop("/instrumentation/garmin196/dto_display/y_char");
				y_char = y_char + 1;
				if(y_char>35){
					y_char = 0;
				}
				setprop("/instrumentation/garmin196/dto_display/y_char",y_char);
				display_dto_search();
				return;
			}
			
			if(popup_status==12){
				var no_ligne = getprop("/instrumentation/garmin196/dto_display/no_ligne_selected");
				var old_no_ligne = no_ligne;
				no_ligne = no_ligne - 1;
				if(no_ligne<0){
					no_ligne = 0;
				}
				setprop("/instrumentation/garmin196/dto_display/no_ligne_selected",no_ligne);
				if(old_no_ligne!=no_ligne){
					setprop("/instrumentation/garmin196/dto_display/ligne["~no_ligne~"]/selected",1);
					setprop("/instrumentation/garmin196/dto_display/ligne["~old_no_ligne~"]/selected",0);
				}
				return;
			}
			
			if(popup_status==20 or popup_status==30){
				var no_ligne = getprop("/instrumentation/garmin196/dto_display/no_ligne_selected");
				var old_no_ligne = no_ligne;
				no_ligne = no_ligne - 1;
				if(no_ligne<0){
					no_ligne = 0;
				}
				setprop("/instrumentation/garmin196/dto_display/no_ligne_selected",no_ligne);
				setprop("/instrumentation/garmin196/dto_display/ligne_select",getprop("/instrumentation/garmin196/dto_display/ligne["~no_ligne~"]/texte"));
				if(old_no_ligne!=no_ligne){
					setprop("/instrumentation/garmin196/dto_display/ligne["~no_ligne~"]/selected",1);
					setprop("/instrumentation/garmin196/dto_display/ligne["~old_no_ligne~"]/selected",0);
				}
				return;
			}
			
			if(popup_status>=40 and popup_status<=99){
				var no_ligne = getprop("/instrumentation/garmin196/nrst_display/no_ligne_selected");
				var old_no_ligne = no_ligne;
				no_ligne = no_ligne - 1;
				if(no_ligne<0){
					no_ligne = 0;
				}
				setprop("/instrumentation/garmin196/nrst_display/no_ligne_selected",no_ligne);
				setprop("/instrumentation/garmin196/nrst_display/ligne_select",getprop("/instrumentation/garmin196/nrst_display/ligne["~no_ligne~"]/texte"));
				if(old_no_ligne!=no_ligne){
					setprop("/instrumentation/garmin196/nrst_display/ligne["~no_ligne~"]/selected",1);
					setprop("/instrumentation/garmin196/nrst_display/ligne["~old_no_ligne~"]/selected",0);
				}
				return;
			}
			
			##traitement des menus
			var status = getprop("/instrumentation/garmin196/status");
			if(status>=100 and status<110){
				setprop("/instrumentation/garmin196/status",170);
				return;
			}
			
			if(status==110){
				setprop("/instrumentation/garmin196/status",100);
				return;
			}
			
			if(status==111){
				if(getprop("/instrumentation/garmin196/menu_flights/max_ligne_selected")>=0){
					var no_ligne = getprop("/instrumentation/garmin196/menu_flights/no_ligne_selected");
					no_ligne = no_ligne - 1;
					if(no_ligne<0){
						no_ligne = 0;
					}
					setprop("/instrumentation/garmin196/menu_flights/no_ligne_selected",no_ligne);
				}
			}
			
			if(status==120){
				setprop("/instrumentation/garmin196/status",110);
				display_menu_flights();
				return;
			}
			
			if(status==121){
				var no_ligne = getprop("/instrumentation/garmin196/menu_routes/no_ligne_selected");
				no_ligne = no_ligne - 1;
				if(no_ligne<0){
					no_ligne = 0;
				}
				setprop("/instrumentation/garmin196/menu_routes/no_ligne_selected",no_ligne);
				return;
			}
			
			if(status==122){
				var no_ligne = getprop("/instrumentation/garmin196/menu_routes/no_ligne_detail");
				no_ligne = no_ligne - 1;
				if(no_ligne<0){
					no_ligne = 0;
				}
				setprop("/instrumentation/garmin196/menu_routes/no_ligne_detail",no_ligne);
				return;
			}
			
			if(status==123){
				var y_char = getprop("/instrumentation/garmin196/menu_routes/search/y_char");
				y_char = y_char + 1;
				if(y_char>35){
					y_char = 0;
				}
				setprop("/instrumentation/garmin196/menu_routes/search/y_char",y_char);
				display_route_waypoint_search();
				return;
			}
			
			if(status==124){
				var no_ligne = getprop("/instrumentation/garmin196/menu_routes/search/no_ligne_selected");
				no_ligne = no_ligne - 1;
				if(no_ligne<0){
					no_ligne = 0;
				}
				setprop("/instrumentation/garmin196/menu_routes/search/no_ligne_selected",no_ligne);
				return;
			}
			
			if(status==130){
				setprop("/instrumentation/garmin196/status",120);
				init_menu_routes_list();
				setprop("/instrumentation/garmin196/menu_routes/no_ligne_selected",-1);
				return;
			}
			
			if(status==131){
				var no_ligne = getprop("/instrumentation/garmin196/menu_points/no_ligne_selected");
				no_ligne = no_ligne - 1;
				if(no_ligne<0){
					no_ligne = 0;
				}
				setprop("/instrumentation/garmin196/menu_points/no_ligne_selected",no_ligne);
				return;
			}
			
			if(status==132){
				var y_char = getprop("/instrumentation/garmin196/menu_points/y_char");
				y_char = y_char + 1;
				if(y_char>35){
					y_char = 0;
				}
				setprop("/instrumentation/garmin196/menu_points/y_char",y_char);
				display_menu_points();
				return;
			}
			
			if(status==133){
				var latitude = getprop("/instrumentation/garmin196/menu_points/latitude");
				latitude = latitude + 1;
				if(latitude>180){
					latitude = 180;
				}
				setprop("/instrumentation/garmin196/menu_points/latitude",latitude);
				display_menu_points();
				return;
			}
			
			if(status==134){
				var latitude = getprop("/instrumentation/garmin196/menu_points/latitude");
				latitude = latitude + .01;
				if(latitude>180){
					latitude = 180;
				}
				setprop("/instrumentation/garmin196/menu_points/latitude",latitude);
				display_menu_points();
				return;
			}
			
			if(status==135){
				var longitude = getprop("/instrumentation/garmin196/menu_points/longitude");
				longitude = longitude + 1;
				if(longitude>180){
					longitude = -180;
				}
				setprop("/instrumentation/garmin196/menu_points/longitude",longitude);
				display_menu_points();
				return;
			}
			
			if(status==136){
				var longitude = getprop("/instrumentation/garmin196/menu_points/longitude");
				longitude = longitude + .01;
				if(longitude>180){
					longitude = -180;
				}
				setprop("/instrumentation/garmin196/menu_points/longitude",longitude);
				display_menu_points();
				return;
			}
			
			if(status==140){
				setprop("/instrumentation/garmin196/status",130);
				setprop("/instrumentation/garmin196/menu_points/no_ligne_selected",-1);
				init_list_points();
				return;
			}
			
			if(status==141){
				var no_ligne = getprop("/instrumentation/garmin196/menu_aircraft/no_ligne_selected");
				no_ligne = no_ligne - 1;
				if(no_ligne<0){
					no_ligne = 0;
				}
				setprop("/instrumentation/garmin196/menu_aircraft/no_ligne_selected",no_ligne);
				display_list_aircraft();
				return;
			}
			
			if(status==142){
				var y_char = getprop("/instrumentation/garmin196/menu_aircraft/y_char");
				y_char = y_char + 1;
				if(y_char>35){
					y_char = 0;
				}
				setprop("/instrumentation/garmin196/menu_aircraft/y_char",y_char);
				display_menu_aircraft_name();
				return;
			}
			
			if(status==143){
				var cruise = getprop("/instrumentation/garmin196/menu_aircraft/selected-cruise");
				cruise = cruise + 1;
				if(cruise>500){
					cruise = 500;
				}
				setprop("/instrumentation/garmin196/menu_aircraft/selected-cruise",cruise);
				display_menu_aircraft();
				return;
			}
			
			if(status==144){
				var max = getprop("/instrumentation/garmin196/menu_aircraft/selected-max");
				max = max + 1;
				if(max>500){
					max = 500;
				}
				setprop("/instrumentation/garmin196/menu_aircraft/selected-max",max);
				display_menu_aircraft();
				return;
			}
			
			if(status==145){
				var fuelflow = getprop("/instrumentation/garmin196/menu_aircraft/selected-fuelflow");
				fuelflow = fuelflow + 0.1;
				if(fuelflow>100){
					fuelflow = 100;
				}
				setprop("/instrumentation/garmin196/menu_aircraft/selected-fuelflow",fuelflow);
				return;
			}
	
			if(status==150){
				setprop("/instrumentation/garmin196/status",140);
				setprop("/instrumentation/garmin196/menu_aircraft/no_ligne_selected",-1);
				init_list_aircraft();
				display_list_aircraft();
				return;
			}
			
			if(status==160){
				setprop("/instrumentation/garmin196/status",150);
				return;
			}
			
			if(status==161){
				var no_ligne = getprop("/instrumentation/garmin196/menu_map/no_ligne_selected");
				no_ligne = no_ligne - 1;
				if(no_ligne<0){
					no_ligne = 0;
				}
				setprop("/instrumentation/garmin196/menu_map/no_ligne_selected",no_ligne);
				return;
			}
			
			if(status==170){
				setprop("/instrumentation/garmin196/status",160);
				setprop("/instrumentation/garmin196/menu_map/no_ligne_selected",-1);
				return;
			}
			
			if(status==171){
				var no_ligne = getprop("/instrumentation/garmin196/menu_setup/no_ligne_selected");
				no_ligne = no_ligne - 1;
				if(no_ligne<0){
					no_ligne = 0;
				}
				setprop("/instrumentation/garmin196/menu_setup/no_ligne_selected",no_ligne);
				return;
			}

			if(status==176){
				var no_ligne = getprop("/instrumentation/garmin196/menu_setup/no_ligne_selected");
				no_ligne = no_ligne - 1;
				if(no_ligne<0){
					no_ligne = 0;
				}
				setprop("/instrumentation/garmin196/menu_setup/no_ligne_selected",no_ligne);
				return;
			}
			
		}elsif(x==1){
			#traitement des popup
			var popup_status = getprop("/instrumentation/garmin196/popup_status");
			if(popup_status==11){
				var y_char = getprop("/instrumentation/garmin196/dto_display/y_char");
				y_char = y_char + 10;
				if(y_char>35){
					y_char = y_char-36;
				}
				setprop("/instrumentation/garmin196/dto_display/y_char",y_char);
				display_dto_search();
				return;
			}
			
			##traitement des menus
			var status = getprop("/instrumentation/garmin196/status");
			
			if(status==123){
				var y_char = getprop("/instrumentation/garmin196/menu_routes/search/y_char");
				y_char = y_char + 10;
				if(y_char>35){
					y_char = y_char-36;
				}
				setprop("/instrumentation/garmin196/menu_routes/search/y_char",y_char);
				display_route_waypoint_search();
				return;
			}
			
			if(status==132){
				var y_char = getprop("/instrumentation/garmin196/menu_points/y_char");
				y_char = y_char + 10;
				if(y_char>35){
					y_char = y_char-36;
				}
				setprop("/instrumentation/garmin196/menu_points/y_char",y_char);
				display_menu_points();
				return;
			}
			
			if(status==133){
				var latitude = getprop("/instrumentation/garmin196/menu_points/latitude");
				latitude = latitude + 10;
				if(latitude>180){
					latitude = 180;
				}
				setprop("/instrumentation/garmin196/menu_points/latitude",latitude);
				display_menu_points();
				return;
			}
			
			if(status==134){
				var latitude = getprop("/instrumentation/garmin196/menu_points/latitude");
				latitude = latitude + .1;
				if(latitude>180){
					latitude = 180;
				}
				setprop("/instrumentation/garmin196/menu_points/latitude",latitude);
				display_menu_points();
				return;
			}
			
			if(status==135){
				var longitude = getprop("/instrumentation/garmin196/menu_points/longitude");
				longitude = longitude + 10;
				if(longitude>180){
					longitude = -180;
				}
				setprop("/instrumentation/garmin196/menu_points/longitude",longitude);
				display_menu_points();
				return;
			}
			
			if(status==136){
				var longitude = getprop("/instrumentation/garmin196/menu_points/longitude");
				longitude = longitude + .1;
				if(longitude>180){
					longitude = -180;
				}
				setprop("/instrumentation/garmin196/menu_points/longitude",longitude);
				display_menu_points();
				return;
			}
			
			if(status==142){
				var y_char = getprop("/instrumentation/garmin196/menu_aircraft/y_char");
				y_char = y_char + 10;
				if(y_char>35){
					y_char = y_char-36;
				}
				setprop("/instrumentation/garmin196/menu_aircraft/y_char",y_char);
				display_menu_aircraft_name();
				return;
			}
			
			if(status==143){
				var cruise = getprop("/instrumentation/garmin196/menu_aircraft/selected-cruise");
				cruise = cruise + 10;
				if(cruise>500){
					cruise = 500;
				}
				setprop("/instrumentation/garmin196/menu_aircraft/selected-cruise",cruise);
				display_menu_aircraft();
				return;
			}
			
			if(status==144){
				var max = getprop("/instrumentation/garmin196/menu_aircraft/selected-max");
				max = max + 10;
				if(max>500){
					max = 500;
				}
				setprop("/instrumentation/garmin196/menu_aircraft/selected-max",max);
				display_menu_aircraft();
				return;
			}
			
			if(status==145){
				var fuelflow = getprop("/instrumentation/garmin196/menu_aircraft/selected-fuelflow");
				fuelflow = fuelflow + 1;
				if(fuelflow>100){
					fuelflow = 100;
				}
				setprop("/instrumentation/garmin196/menu_aircraft/selected-fuelflow",fuelflow);
				return;
			}
		}
	}
}

var rockerdown = func (x){
	var serviceable = getprop("/instrumentation/garmin196/serviceable");
	if(serviceable==1){
		if(x==0){
			#traitement des popup
			var popup_status = getprop("/instrumentation/garmin196/popup_status");
			if(popup_status==1){
				var light_level = getprop("/instrumentation/garmin196/light");
				light_level = light_level - 0.1;
				if(light_level<0){
					light_level = 0;
				}
				setprop("/instrumentation/garmin196/light",light_level);
				return;
			}
			
			if(popup_status==11){
				var y_char = getprop("/instrumentation/garmin196/dto_display/y_char");
				y_char = y_char - 1;
				if(y_char<0){
					y_char = 35;
				}
				setprop("/instrumentation/garmin196/dto_display/y_char",y_char);
				display_dto_search();
				return;
			}
			
			if(popup_status==12){
				var no_ligne = getprop("/instrumentation/garmin196/dto_display/no_ligne_selected");
				var old_no_ligne = no_ligne;
				var max_ligne = getprop("/instrumentation/garmin196/dto_display/max_ligne_selected");
				no_ligne = no_ligne + 1;
				if(no_ligne>max_ligne){
					no_ligne = max_ligne;
				}
				setprop("/instrumentation/garmin196/dto_display/no_ligne_selected",no_ligne);
				if(old_no_ligne!=no_ligne){
					setprop("/instrumentation/garmin196/dto_display/ligne["~no_ligne~"]/selected",1);
					setprop("/instrumentation/garmin196/dto_display/ligne["~old_no_ligne~"]/selected",0);
				}
				return;
			}
			
			if(popup_status==20 or popup_status==30){
				var no_ligne = getprop("/instrumentation/garmin196/dto_display/no_ligne_selected");
				var old_no_ligne = no_ligne;
				var max_ligne = getprop("/instrumentation/garmin196/dto_display/max_ligne_selected");
				no_ligne = no_ligne + 1;
				if(no_ligne>max_ligne){
					no_ligne = max_ligne;
				}
				setprop("/instrumentation/garmin196/dto_display/no_ligne_selected",no_ligne);
				setprop("/instrumentation/garmin196/dto_display/ligne_select",getprop("/instrumentation/garmin196/dto_display/ligne["~no_ligne~"]/texte"));
				if(old_no_ligne!=no_ligne){
					setprop("/instrumentation/garmin196/dto_display/ligne["~no_ligne~"]/selected",1);
					setprop("/instrumentation/garmin196/dto_display/ligne["~old_no_ligne~"]/selected",0);
				}
				return;
			}
			
			if(popup_status>=40 and popup_status<=99){
				var no_ligne = getprop("/instrumentation/garmin196/nrst_display/no_ligne_selected");
				var old_no_ligne = no_ligne;
				var max_ligne = getprop("/instrumentation/garmin196/nrst_display/max_ligne_selected");
				no_ligne = no_ligne + 1;
				if(no_ligne>max_ligne){
					no_ligne = max_ligne;
				}
				setprop("/instrumentation/garmin196/nrst_display/no_ligne_selected",no_ligne);
				setprop("/instrumentation/garmin196/nrst_display/ligne_select",getprop("/instrumentation/garmin196/nrst_display/ligne["~no_ligne~"]/texte"));
				if(old_no_ligne!=no_ligne){
					setprop("/instrumentation/garmin196/nrst_display/ligne["~no_ligne~"]/selected",1);
					setprop("/instrumentation/garmin196/nrst_display/ligne["~old_no_ligne~"]/selected",0);
				}
				return;
			}
			
			##traitement des menus
			var status = getprop("/instrumentation/garmin196/status");
			if(status>=100 and status<110){
				setprop("/instrumentation/garmin196/status",110);
				display_menu_flights();
				return;
			}
			
			if(status==110){
				setprop("/instrumentation/garmin196/status",120);
				init_menu_routes_list();
				setprop("/instrumentation/garmin196/menu_routes/no_ligne_selected",-1);
				return;
			}
			
			if(status==111){
				if(getprop("/instrumentation/garmin196/menu_flights/max_ligne_selected")>=0){
					var no_ligne = getprop("/instrumentation/garmin196/menu_flights/no_ligne_selected");
					no_ligne = no_ligne + 1;
					if(no_ligne>getprop("/instrumentation/garmin196/menu_flights/max_ligne_selected")){
						no_ligne = getprop("/instrumentation/garmin196/menu_flights/max_ligne_selected");
					}
					setprop("/instrumentation/garmin196/menu_flights/no_ligne_selected",no_ligne);
				}
				return;
			}
			
			if(status==120){
				setprop("/instrumentation/garmin196/status",130);
				setprop("/instrumentation/garmin196/menu_routes/no_ligne_selected",-1);
				init_list_points();
				return;
			}
			
			if(status==121){
				var no_ligne = getprop("/instrumentation/garmin196/menu_routes/no_ligne_selected");
				var max_no_ligne = getprop("/instrumentation/garmin196/menu_routes/max_no_ligne");
				no_ligne = no_ligne + 1;
				if(no_ligne>max_no_ligne){
					no_ligne = max_no_ligne;
				}
				setprop("/instrumentation/garmin196/menu_routes/no_ligne_selected",no_ligne);
				return;
			}

			if(status==122){
				var no_ligne = getprop("/instrumentation/garmin196/menu_routes/no_ligne_detail");
				var max_no_ligne = getprop("/instrumentation/garmin196/menu_routes/max_no_ligne_detail");
				no_ligne = no_ligne + 1;
				if(no_ligne>max_no_ligne){
					no_ligne = max_no_ligne;
				}
				setprop("/instrumentation/garmin196/menu_routes/no_ligne_detail",no_ligne);
				return;
			}
			
			if(status==123){
				var y_char = getprop("/instrumentation/garmin196/menu_routes/search/y_char");
				y_char = y_char - 1;
				if(y_char<0){
					y_char = 35;
				}
				setprop("/instrumentation/garmin196/menu_routes/search/y_char",y_char);
				display_route_waypoint_search();
				return;
			}
			
			if(status==124){
				var no_ligne = getprop("/instrumentation/garmin196/menu_routes/search/no_ligne_selected");
				var max_no_ligne = getprop("/instrumentation/garmin196/menu_routes/search/max_ligne_selected");
				no_ligne = no_ligne + 1;
				if(no_ligne>max_no_ligne){
					no_ligne = max_no_ligne;
				}
				setprop("/instrumentation/garmin196/menu_routes/search/no_ligne_selected",no_ligne);
				return;
			}
			
			if(status==130){
				setprop("/instrumentation/garmin196/status",140);
				setprop("/instrumentation/garmin196/menu_aircraft/no_ligne_selected",-1);
				init_list_aircraft();
				display_list_aircraft();
				return;
			}

			if(status==131){
				var no_ligne = getprop("/instrumentation/garmin196/menu_points/no_ligne_selected");
				no_ligne = no_ligne + 1;
				if(no_ligne>getprop("/instrumentation/garmin196/menu_points/max_no_ligne")){
					no_ligne = getprop("/instrumentation/garmin196/menu_points/max_no_ligne");
				}
				setprop("/instrumentation/garmin196/menu_points/no_ligne_selected",no_ligne);
				return;
			}
			
			if(status==132){
				var y_char = getprop("/instrumentation/garmin196/menu_points/y_char");
				y_char = y_char - 1;
				if(y_char<0){
					y_char = 35;
				}
				setprop("/instrumentation/garmin196/menu_points/y_char",y_char);
				display_menu_points();
				return;
			}
			
			if(status==133){
				var latitude = getprop("/instrumentation/garmin196/menu_points/latitude");
				latitude = latitude - 1;
				if(latitude<-180){
					latitude = -180;
				}
				setprop("/instrumentation/garmin196/menu_points/latitude",latitude);
				display_menu_points();
				return;
			}
			
			if(status==134){
				var latitude = getprop("/instrumentation/garmin196/menu_points/latitude");
				latitude = latitude - .01;
				if(latitude<-180){
					latitude = -180;
				}
				setprop("/instrumentation/garmin196/menu_points/latitude",latitude);
				display_menu_points();
				return;
			}
			
			if(status==135){
				var longitude = getprop("/instrumentation/garmin196/menu_points/longitude");
				longitude = longitude - 1;
				if(longitude<-180){
					longitude = 180;
				}
				setprop("/instrumentation/garmin196/menu_points/longitude",longitude);
				display_menu_points();
				return;
			}
			
			if(status==136){
				var longitude = getprop("/instrumentation/garmin196/menu_points/longitude");
				longitude = longitude - .01;
				if(longitude<-180){
					longitude = 180;
				}
				setprop("/instrumentation/garmin196/menu_points/longitude",longitude);
				display_menu_points();
				return;
			}
			
			if(status==140){
				setprop("/instrumentation/garmin196/status",150);
				return;
			}
			
			if(status==141){
				var no_ligne = getprop("/instrumentation/garmin196/menu_aircraft/no_ligne_selected");
				no_ligne = no_ligne + 1;
				if(no_ligne>getprop("/instrumentation/garmin196/menu_aircraft/max_no_ligne")){
					no_ligne = getprop("/instrumentation/garmin196/menu_aircraft/max_no_ligne");
				}
				setprop("/instrumentation/garmin196/menu_aircraft/no_ligne_selected",no_ligne);
				display_list_aircraft();
				return;
			}
			
			if(status==142){
				var y_char = getprop("/instrumentation/garmin196/menu_aircraft/y_char");
				y_char = y_char - 1;
				if(y_char<0){
					y_char = 35;
				}
				setprop("/instrumentation/garmin196/menu_aircraft/y_char",y_char);
				display_menu_aircraft_name();
				return;
			}
			
			if(status==143){
				var cruise = getprop("/instrumentation/garmin196/menu_aircraft/selected-cruise");
				cruise = cruise - 1;
				if(cruise<1){
					cruise = 1;
				}
				setprop("/instrumentation/garmin196/menu_aircraft/selected-cruise",cruise);
				display_menu_aircraft();
				return;
			}
			
			if(status==144){
				var max = getprop("/instrumentation/garmin196/menu_aircraft/selected-max");
				max = max - 1;
				if(max<1){
					max = 1;
				}
				setprop("/instrumentation/garmin196/menu_aircraft/selected-max",max);
				display_menu_aircraft();
				return;
			}
			
			if(status==145){
				var fuelflow = getprop("/instrumentation/garmin196/menu_aircraft/selected-fuelflow");
				fuelflow = fuelflow - 0.1;
				if(fuelflow<1){
					fuelflow = 1;
				}
				setprop("/instrumentation/garmin196/menu_aircraft/selected-fuelflow",fuelflow);
				return;
			}
			
			if(status==150){
				setprop("/instrumentation/garmin196/status",160);
				setprop("/instrumentation/garmin196/menu_map/no_ligne_selected",-1);
				return;
			}
			
			if(status==160){
				setprop("/instrumentation/garmin196/status",170);
				return;
			}
			
			if(status==161){
				var no_ligne = getprop("/instrumentation/garmin196/menu_map/no_ligne_selected");
				no_ligne = no_ligne + 1;
				if(no_ligne>5){
					no_ligne = 5;
				}
				setprop("/instrumentation/garmin196/menu_map/no_ligne_selected",no_ligne);
				return;
			}
			
			if(status==170){
				setprop("/instrumentation/garmin196/status",100);
				return;
			}
			
			if(status==171){
				var no_ligne = getprop("/instrumentation/garmin196/menu_setup/no_ligne_selected");
				no_ligne = no_ligne + 1;
				if(no_ligne>5){
					no_ligne = 5;
				}
				setprop("/instrumentation/garmin196/menu_setup/no_ligne_selected",no_ligne);
				return;
			}
			
			if(status==176){
				var no_ligne = getprop("/instrumentation/garmin196/menu_setup/no_ligne_selected");
				no_ligne = no_ligne + 1;
				if(no_ligne>1){
					no_ligne = 1;
				}
				setprop("/instrumentation/garmin196/menu_setup/no_ligne_selected",no_ligne);
				return;
			}
			
		}elsif(x==1){
			#traitement des popup
			var popup_status = getprop("/instrumentation/garmin196/popup_status");
			if(popup_status==11){
				var y_char = getprop("/instrumentation/garmin196/dto_display/y_char");
				y_char = y_char - 10;
				if(y_char<0){
					y_char = y_char + 36;
				}
				setprop("/instrumentation/garmin196/dto_display/y_char",y_char);
				display_dto_search();
				return;
			}
			
			##traitement des menus
			var status = getprop("/instrumentation/garmin196/status");
			
			if(status==123){
				var y_char = getprop("/instrumentation/garmin196/menu_routes/search/y_char");
				y_char = y_char - 10;
				if(y_char<0){
					y_char = y_char + 36;
				}
				setprop("/instrumentation/garmin196/menu_routes/search/y_char",y_char);
				display_route_waypoint_search();
				return;
			}
			
			if(status==132){
				var y_char = getprop("/instrumentation/garmin196/menu_points/y_char");
				y_char = y_char - 10;
				if(y_char<0){
					y_char = y_char + 36;
				}
				setprop("/instrumentation/garmin196/menu_points/y_char",y_char);
				display_menu_points();
				return;
			}
			
			if(status==132){
				var y_char = getprop("/instrumentation/garmin196/menu_points/y_char");
				y_char = y_char - 1;
				if(y_char<0){
					y_char = 35;
				}
				setprop("/instrumentation/garmin196/menu_points/y_char",y_char);
				display_menu_points();
				return;
			}
			
			if(status==133){
				var latitude = getprop("/instrumentation/garmin196/menu_points/latitude");
				latitude = latitude - 10;
				if(latitude<-180){
					latitude = -180;
				}
				setprop("/instrumentation/garmin196/menu_points/latitude",latitude);
				display_menu_points();
				return;
			}
			
			if(status==134){
				var latitude = getprop("/instrumentation/garmin196/menu_points/latitude");
				latitude = latitude - .1;
				if(latitude<-180){
					latitude = -180;
				}
				setprop("/instrumentation/garmin196/menu_points/latitude",latitude);
				display_menu_points();
				return;
			}
			
			if(status==135){
				var longitude = getprop("/instrumentation/garmin196/menu_points/longitude");
				longitude = longitude - 10;
				if(longitude<-180){
					longitude = 180;
				}
				setprop("/instrumentation/garmin196/menu_points/longitude",longitude);
				display_menu_points();
				return;
			}
			
			if(status==136){
				var longitude = getprop("/instrumentation/garmin196/menu_points/longitude");
				longitude = longitude - .1;
				if(longitude<-180){
					longitude = 180;
				}
				setprop("/instrumentation/garmin196/menu_points/longitude",longitude);
				display_menu_points();
				return;
			}
			
			if(status==142){
				var y_char = getprop("/instrumentation/garmin196/menu_aircraft/y_char");
				y_char = y_char - 10;
				if(y_char<0){
					y_char = y_char + 36;
				}
				setprop("/instrumentation/garmin196/menu_aircraft/y_char",y_char);
				display_menu_aircraft_name();
				return;
			}
			
			if(status==143){
				var cruise = getprop("/instrumentation/garmin196/menu_aircraft/selected-cruise");
				cruise = cruise - 10;
				if(cruise<1){
					cruise = 1;
				}
				setprop("/instrumentation/garmin196/menu_aircraft/selected-cruise",cruise);
				display_menu_aircraft();
				return;
			}
			
			if(status==144){
				var max = getprop("/instrumentation/garmin196/menu_aircraft/selected-max");
				max = max - 10;
				if(max<1){
					max = 1;
				}
				setprop("/instrumentation/garmin196/menu_aircraft/selected-max",max);
				display_menu_aircraft();
				return;
			}
			
			if(status==145){
				var fuelflow = getprop("/instrumentation/garmin196/menu_aircraft/selected-fuelflow");
				fuelflow = fuelflow - 1;
				if(fuelflow<1){
					fuelflow = 1;
				}
				setprop("/instrumentation/garmin196/menu_aircraft/selected-fuelflow",fuelflow);
				return;
			}
		}
	}
}

var rockerleft = func (x){
	var serviceable = getprop("/instrumentation/garmin196/serviceable");
	if(serviceable==1){
		if(x==0){
			#traitement des popup
			var popup_status = getprop("/instrumentation/garmin196/popup_status");
			if(popup_status==10){
				setprop("/instrumentation/garmin196/popup_status",30);
				setprop("/instrumentation/garmin196/dto_display/ligne_select","");
				init_dto_display();
				display_dto_user();
				return;
			}
			if(popup_status==11){
				var x_char = getprop("/instrumentation/garmin196/dto_display/x_char");
				if(x_char>0){
					setprop("/instrumentation/garmin196/dto_display/x_char",x_char-1);
					setprop("/instrumentation/garmin196/dto_display/y_char",searchLastChar(getprop("/instrumentation/garmin196/dto_display/ligne_select"),getprop("/instrumentation/garmin196/dto_display/x_char")));
					display_dto_search();
				}
				return;
			}
			if(popup_status==20){
				setprop("/instrumentation/garmin196/popup_status",10);
				setprop("/instrumentation/garmin196/dto_display/x_char",0);
				setprop("/instrumentation/garmin196/dto_display/y_char",0);
				setprop("/instrumentation/garmin196/dto_display/ligne_select","Press Enter to search");
				init_dto_display();
				return;
			}
			if(popup_status==30){
				setprop("/instrumentation/garmin196/popup_status",20);
				setprop("/instrumentation/garmin196/dto_display/ligne_select","");
				init_dto_display();
				display_dto_recent();
				return;
			}
			
			if(popup_status==40){
				setprop("/instrumentation/garmin196/popup_status",80);
				display_nrst("wpt");
				return;
			}
			
			if(popup_status==50){
				setprop("/instrumentation/garmin196/popup_status",40);
				display_nrst("airport");
				return;
			}
			
			if(popup_status==60){
				setprop("/instrumentation/garmin196/popup_status",50);
				display_nrst("vor");
				return;
			}
			
			if(popup_status==70){
				setprop("/instrumentation/garmin196/popup_status",60);
				display_nrst("ndb");
				return;
			}
			
			if(popup_status==80){
				setprop("/instrumentation/garmin196/popup_status",70);
				display_nrst("fix");
				return;
			}
			
			var status = getprop("/instrumentation/garmin196/status");
			
			##menu routes
			#suppression de la ligne
			if(status==121){
				var no_ligne = getprop("/instrumentation/garmin196/menu_routes/no_ligne_selected");
				delete_route(no_ligne);
				init_menu_routes_list();
			}
			
			if(status==122){
				var no_ligne_liste = getprop("/instrumentation/garmin196/menu_routes/no_ligne_selected");
				var no_ligne_detail = getprop("/instrumentation/garmin196/menu_routes/no_ligne_detail");
				delete_route_detail(no_ligne_liste,no_ligne_detail);
				update_menu_routes_detail();
				return;
			}
			
			if(status==123){
				var x_char = getprop("/instrumentation/garmin196/menu_routes/search/x_char");
				if(x_char>0){
					setprop("/instrumentation/garmin196/menu_routes/search/x_char",x_char-1);
					setprop("/instrumentation/garmin196/menu_routes/search/y_char",searchLastChar(getprop("/instrumentation/garmin196/menu_routes/search/ligne_select"),getprop("/instrumentation/garmin196/menu_routes/search/x_char")));
					display_route_waypoint_search();
				}
				return;
			}
			
			##menu points
			#suppression de la ligne
			if(status==131){
				var no_ligne = getprop("/instrumentation/garmin196/menu_points/no_ligne_selected");
				delete_point(no_ligne);
				init_list_points();
			}
			
			if(status==132){
				var x_char = getprop("/instrumentation/garmin196/menu_points/x_char");
				if(x_char>0){
					setprop("/instrumentation/garmin196/menu_points/x_char",x_char-1);
					setprop("/instrumentation/garmin196/menu_points/y_char",searchLastChar(getprop("/instrumentation/garmin196/menu_points/name"),getprop("/instrumentation/garmin196/menu_points/x_char")));
					display_menu_points();
				}
				return;
			}
			
			##menu aircraft
			#suppression de la ligne
			if(status==141){
				var no_ligne = getprop("/instrumentation/garmin196/menu_aircraft/no_ligne_selected");
				delete_aircraft(no_ligne);
				init_list_aircraft();
				display_list_aircraft();
			}

			if(status==142){
				var x_char = getprop("/instrumentation/garmin196/menu_aircraft/x_char");
				if(x_char>0){
					setprop("/instrumentation/garmin196/menu_aircraft/x_char",x_char-1);
					setprop("/instrumentation/garmin196/menu_aircraft/y_char",searchLastChar(getprop("/instrumentation/garmin196/menu_aircraft/selected-name"),getprop("/instrumentation/garmin196/menu_aircraft/x_char")));
					display_menu_aircraft_name();
				}
				return;
			}
			
			if(status==175){
				setprop("/instrumentation/garmin196/status",170);
			}

		}
	}
}

var rockerright = func (x){
	var serviceable = getprop("/instrumentation/garmin196/serviceable");
	if(serviceable==1){
		if(x==0){
			#traitement des popup
			var popup_status = getprop("/instrumentation/garmin196/popup_status");
			if(popup_status==10){
				setprop("/instrumentation/garmin196/popup_status",20);
				setprop("/instrumentation/garmin196/dto_display/ligne_select","");
				init_dto_display();
				display_dto_recent();
				return;
			}
			if(popup_status==11){
				var x_char = getprop("/instrumentation/garmin196/dto_display/x_char");
				if(x_char<20){
					setprop("/instrumentation/garmin196/dto_display/x_char",x_char+1);
					display_dto_search();
				}
				return;
			}
			if(popup_status==20){
				setprop("/instrumentation/garmin196/popup_status",30);
				setprop("/instrumentation/garmin196/dto_display/ligne_select","");
				init_dto_display();
				display_dto_user();
				return;
			}
			if(popup_status==30){
				setprop("/instrumentation/garmin196/popup_status",10);
				setprop("/instrumentation/garmin196/dto_display/ligne_select","Press Enter to search");
				init_dto_display();
				setprop("/instrumentation/garmin196/dto_display/x_char",0);
				setprop("/instrumentation/garmin196/dto_display/y_char",0);
				return;
			}
			
			if(popup_status==40){
				setprop("/instrumentation/garmin196/popup_status",50);
				display_nrst("vor");
				return;
			}
			
			if(popup_status==50){
				setprop("/instrumentation/garmin196/popup_status",60);
				display_nrst("ndb");
				return;
			}
			
			if(popup_status==60){
				setprop("/instrumentation/garmin196/popup_status",70);
				display_nrst("fix");
				return;
			}
			
			if(popup_status==70){
				setprop("/instrumentation/garmin196/popup_status",80);
				display_nrst("wpt");
				return;
			}
			
			if(popup_status==80){
				setprop("/instrumentation/garmin196/popup_status",40);
				display_nrst("airport");
				return;
			}
			
			var status = getprop("/instrumentation/garmin196/status");
			
			##menu routes
			if(status==121){
				var no_ligne = getprop("/instrumentation/garmin196/menu_routes/no_ligne_selected");
				if(getprop("/instrumentation/garmin196/routes/route["~no_ligne~"]/name")!=nil){
					load_flight_plan(no_ligne);
					affiche_fpl_loaded();
				}
				return;
			}
			
			if(status==122){
				var no_ligne = getprop("/instrumentation/garmin196/menu_routes/no_ligne_selected");
				var no_ligne_detail = getprop("/instrumentation/garmin196/menu_routes/no_ligne_detail");
				if(getprop("/instrumentation/garmin196/routes/route["~no_ligne~"]/wpts/wpt["~no_ligne_detail~"]/id")!=nil){
					jump_to_waypoint(no_ligne_detail);
					affiche_waypoint_jump();
				}
				return;
			}
			
			if(status==123){
				var x_char = getprop("/instrumentation/garmin196/menu_routes/search/x_char");
				if(x_char<20){
					setprop("/instrumentation/garmin196/menu_routes/search/x_char",x_char+1);
					display_route_waypoint_search();
				}
				return;
			}
			
			##menu points
			if(status==132){
				var x_char = getprop("/instrumentation/garmin196/menu_points/x_char");
				if(x_char<20){
					setprop("/instrumentation/garmin196/menu_points/x_char",x_char+1);
					display_menu_points();
				}
				return;
			}
			
			##menu aircraft
			if(status==142){
				var x_char = getprop("/instrumentation/garmin196/menu_aircraft/x_char");
				if(x_char<20){
					setprop("/instrumentation/garmin196/menu_aircraft/x_char",x_char+1);
					display_menu_aircraft_name();
				}
				return;
			}
			
			if(status==170){
				setprop("/instrumentation/garmin196/status",175);
			}
		
		}
	}
}

##recalc speed to display
var change_speed_display = func{
	var max_speed = getprop("/instrumentation/garmin196/max-speed");
	var speed = getprop("/instrumentation/gps/indicated-ground-speed-kt");
	setprop("/instrumentation/garmin196/speed-display",315*speed/max_speed);
}

##calcul du turn rate
var calcul_turn_rate = func(dt){
	if(last_bearing==-1){
		last_bearing = getprop("/instrumentation/gps/magnetic-bug-error-deg");
	}
	bearing = getprop("/instrumentation/gps/magnetic-bug-error-deg");
	
	var turn_rate = abs(bearing - last_bearing);
	if(turn_rate>180){
		turn_rate = 360 - turn_rate;
 	}
	var sgn = 1;
	if(bearing - last_bearing<0){
		sgn = -1;
	}
	turn_rate = turn_rate/dt;
	if(turn_rate<10){##pour enlever les valeurs aberentes
		props.globals.getNode("/instrumentation/garmin196/turn-rate",1).setDoubleValue(sgn*turn_rate);
	}
	last_bearing = bearing;
}

var change_wpt_id = func{
	if(getprop("/instrumentation/gps/mode")!=nil and getprop("/autopilot/route-manager/wp[0]/id")!=""){
		props.global.getNode("/instrumentation/garmin196/panel-wpt-id").alias("/autopilot/route-manager/wp[0]/id");
	}else{
		setprop("/instrumentation/garmin196/panel-wpt-id",getprop("/instrumentation/garmin196/panel-wpt-dto-id"));
	}
}
setlistener("/instrumentation/gps/mode",change_wpt_id);

var change_position_wpt_bug = func{
	var wpt_bearing = getprop("/instrumentation/gps/wp/wp[1]/bearing-mag-deg");
	var aircraft_bearing = getprop("/instrumentation/gps/indicated-track-magnetic-deg");
	
	var diff = wpt_bearing - aircraft_bearing;
	setprop("/instrumentation/garmin196/position-wpt-bearing",diff);
	setprop("/instrumentation/garmin196/panel-wpt-bearing",diff);
	
	var nb_wpt = getprop("/autopilot/route-manager/route/num");
	var no_wpt = getprop("/autopilot/route-manager/current-wp");
	var panel_course = 0;
	if(no_wpt>0 and no_wpt<(nb_wpt-1)){
		panel_course = getprop("/autopilot/route-manager/route/wp["~(no_wpt-1)~"]/leg-bearing-true-deg");
	}else{
		panel_course = getprop("/instrumentation/gps/wp/wp[1]/bearing-mag-deg");
	}
	panel_course = panel_course - aircraft_bearing;
	var panel_deflexion = diff - panel_course;

	if(math.cos(diff*math.pi/180)>0){
		setprop("/instrumentation/garmin196/panel-neddle-to-flag",1);
	}else{
		setprop("/instrumentation/garmin196/panel-neddle-to-flag",0);
	}
	if(panel_deflexion>10){
		panel_deflexion = 10;
	}
	if(panel_deflexion<-10){
		panel_deflexion = -10;
	}
	
	setprop("/instrumentation/garmin196/panel-neddle-course",panel_course);
	setprop("/instrumentation/garmin196/panel-neddle-deflexion",panel_deflexion);
	
	##vnav
	var altitude_id = getprop("/instrumentation/garmin196/vnav/altitude-m");
	var latitude_id = getprop("/instrumentation/garmin196/vnav/latitude");
	var longitude_id = getprop("/instrumentation/garmin196/vnav/longitude");
	if(altitude_id!=nil and latitude_id!=nil and longitude_id!=nil and latitude_id!=-9999 and longitude_id!=-9999 and getprop("/instrumentation/garmin196/params/vnav-indicator")==1){
		var altitude_aircraft = getprop("/instrumentation/gps/indicated-altitude-ft") * 0.3048;
		var latitude_aircraft = getprop("/instrumentation/gps/indicated-latitude-deg");
		var longitude_aircraft = getprop("/instrumentation/gps/indicated-longitude-deg");
		
		var coord_id = geo.Coord.new().set_latlon(latitude_id,longitude_id);
		var coord_aircraft = geo.Coord.new().set_latlon(latitude_aircraft,longitude_aircraft);
		var distance = coord_aircraft.distance_to(coord_id);## en metres
		var diff_altitude = altitude_aircraft - altitude_id;
		var angle = math.atan2(diff_altitude,distance)*180/math.pi;
		#setprop("/instrumentation/garmin196/vnav/angle",angle);
		var deviation = angle - 3;#pente ideale = 3 degres
		if(deviation>10){
			deviation = 10;
		}
		if(deviation<-10){
			deviation = -10;
		}
		setprop("/instrumentation/garmin196/vnav/deviation",deviation);
	}else{
		setprop("/instrumentation/garmin196/vnav/deviation",0);
	}
}

var update_map = func{
	##protection, une seule recherche gps a la fois, la popup devient prioritaire
	var popup_status = getprop("/instrumentation/garmin196/popup_status");
	if(popup_status<10 or popup_status>99){
		var max_plots = 25;
		var offset_mul = 0.034;
		var symbol_map_range = getprop("/instrumentation/garmin196/map-range") * 8;
		var plots = [];
		var type_symbol = [ "airport" , "vor" , "ndb" , "fix" , "twn" , "wpt"];
		
		for(var i=0;i<size(type_symbol);i=i+1){
			if(getprop("/instrumentation/garmin196/symbols/params/"~type_symbol[i])==1){
				if(type_symbol[i]=="twn" or type_symbol[i]=="wpt"){
					props.globals.getNode("/instrumentation/gps/scratch/max-results", 1).setIntValue(max_plots*8 + 1);
				}else{
					props.globals.getNode("/instrumentation/gps/scratch/max-results", 1).setIntValue(max_plots*4 + 1);
				}
				props.globals.getNode("/instrumentation/gps/scratch/longitude-deg", 1).setDoubleValue(-9999);
				props.globals.getNode("/instrumentation/gps/scratch/latitude-deg", 1).setDoubleValue(-9999);
				var type = type_symbol[i];
				if(type == "twn"){
					type = "wpt";
				}
				setprop("/instrumentation/gps/scratch/type", type);
				setprop("/instrumentation/gps/command", "nearest");
				
				while (getprop('/instrumentation/gps/scratch/has-next')) {
					var id = getprop('/instrumentation/gps/scratch/ident');
					var range = getprop('/instrumentation/gps/scratch/distance-nm') / symbol_map_range; 
					var bearing = 360 - getprop("/instrumentation/gps/indicated-track-magnetic-deg") + getprop('/instrumentation/gps/scratch/mag-bearing-deg');
					if(bearing<0){
						bearing = bearing + 360;
					}
					
					if(bearing>360){
						bearing = bearing - 360;
					}
					
					if(i==1){##vor
						id = id ~ " " ~ sprintf("%2.2f",getprop('/instrumentation/gps/scratch/frequency-mhz'));
					}
					
					if(i==2){##ndb
						id = id ~ " " ~ sprintf("%2.1f",getprop('/instrumentation/gps/scratch/frequency-khz'));
					}
					
					var plot = { id: id,bearing: bearing,type: i,range: range};
					if(range<=1){
						if(i<4){
							append(plots,plot);
						}elsif(i==4 and substr(id,size(id)-6)=="WPTTWN"){
							append(plots,plot);
						}elsif(i==5 and substr(id,size(id)-6)=="WPTUSR"){
							append(plots,plot);
						}
					}else{
						break;
					}
					setprop("/instrumentation/gps/command", "next");
				}
			}
		}

		var plots_sorted = sort (plots, func (a,b) a.range - b.range);
		
		##suppression des points les plus proches si il y en a de trop
		var filtrage = getprop("/instrumentation/garmin196/params/filtrage");
		if(filtrage==1){
			var nb_points = 0;
			for(var i=0;i<size(plots_sorted);i=i+1){
				if(plots_sorted[i].range<0.25){#un quart d'ecran
					nb_points = nb_points + 1;
				}else{
					break;
				}
			}
			if(nb_points>5){
				plots_sorted = subvec(plots_sorted,nb_points);
			}
		}
		
		var nb_plots = max_plots;
		if(nb_plots>size(plots_sorted)){
			nb_plots = size(plots_sorted);
		}
		for(var i=0;i<nb_plots;i=i+1){
			if(plots_sorted[i].type==4 or plots_sorted[i].type==5){##town or waypoint
				var type_wpt = substr(plots_sorted[i].id,size(plots_sorted[i].id)-6);
				if(type_wpt=="WPTTWN"){#cities
					plots_sorted[i].id = substr(plots_sorted[i].id,0,size(plots_sorted[i].id)-8);
				}elsif(type_wpt=="WPTUSR"){#wpt user
					plots_sorted[i].id = substr(plots_sorted[i].id,0,size(plots_sorted[i].id)-6);
					plots_sorted[i].type = 5;
				}
			}
			
			props.globals.getNode("/instrumentation/garmin196/symbols/symbol["~i~"]/id",1).setValue(plots_sorted[i].id);
			props.globals.getNode("/instrumentation/garmin196/symbols/symbol["~i~"]/type",1).setValue(plots_sorted[i].type);
			
			##calcul des coordonnees
			var x_wp = math.cos(plots_sorted[i].bearing*math.pi/180) * plots_sorted[i].range * offset_mul;
			var y_wp = math.sin(plots_sorted[i].bearing*math.pi/180) * plots_sorted[i].range * offset_mul;
			props.globals.getNode("/instrumentation/garmin196/symbols/symbol["~i~"]/x",1).setDoubleValue(x_wp);
			props.globals.getNode("/instrumentation/garmin196/symbols/symbol["~i~"]/y",1).setDoubleValue(y_wp);

			if(x_wp<0.026 and x_wp>-0.026 and y_wp<0.0323 and y_wp>-0.0323){##si on est dans l'ecran, on affiche
				props.globals.getNode("/instrumentation/garmin196/symbols/symbol["~i~"]/visible",1).setBoolValue(1);
			}else{
				props.globals.getNode("/instrumentation/garmin196/symbols/symbol["~i~"]/visible",1).setBoolValue(0);
			}
		}

		for(var i=nb_plots;i<max_plots;i=i+1){
			props.globals.getNode("/instrumentation/garmin196/symbols/symbol["~i~"]/visible",1).setIntValue(0);
		}
		
		##wpt path calculations 
		var offset_range_wp_direct = 0.19;
		var range_wp_direct = offset_range_wp_direct * getprop("/instrumentation/gps/wp/wp[1]/distance-nm") / symbol_map_range;
		
		var bearing_wp_direct = getprop("/instrumentation/garmin196/panel-wpt-bearing");
		var x_range_wp_direct = math.abs(math.cos(bearing_wp_direct*math.pi/180) * range_wp_direct); #max 0.15
		if(x_range_wp_direct>0.15){
			range_wp_direct = math.abs(0.15 / math.cos(bearing_wp_direct*math.pi/180));
		}
		var y_range_wp_direct = math.abs(math.sin(bearing_wp_direct*math.pi/180) * range_wp_direct); #max 0.18
		if(y_range_wp_direct>0.18){
			range_wp_direct = math.abs(0.18 / math.sin(bearing_wp_direct*math.pi/180));
		}		
		setprop("/instrumentation/garmin196/symbols/paths/range_wp_direct/range",range_wp_direct);

		if(getprop("/instrumentation/garmin196/panel-wpt-id")!=nil and getprop("/instrumentation/garmin196/panel-wpt-id")!="------"){
			setprop("/instrumentation/garmin196/symbols/paths/range_wp_direct/visible",1);
		}else{
			setprop("/instrumentation/garmin196/symbols/paths/range_wp_direct/visible",0);
		}
		
		##flight plan calculation
		var nb_path = getprop("/autopilot/route-manager/route/num");
		if(nb_path>9){
			nb_path = 9;
		}
		
		var aircraft_bearing = getprop("/instrumentation/gps/indicated-track-magnetic-deg");
		for(var i=0;i<(nb_path-1);i=i+1){
			var id = getprop("/autopilot/route-manager/route/wp["~i~"]/id");

			setprop("/instrumentation/gps/scratch/max-results",1);
			setprop("/instrumentation/gps/scratch/longitude-deg",-9999);
			setprop("/instrumentation/gps/scratch/latitude-deg",-9999);
			setprop("/instrumentation/gps/scratch/type", "");
			setprop("/instrumentation/gps/scratch/query", id);
			setprop("/instrumentation/gps/command", "search");
			
			if(getprop("/instrumentation/gps/scratch/valid")==0 or getprop("/instrumentation/gps/scratch/ident")!=id){
				setprop("/instrumentation/gps/scratch/type", "fix");
				setprop("/instrumentation/gps/scratch/query", id);
				setprop("/instrumentation/gps/command", "search");
			}
			
			var distance_to_wp = getprop("/instrumentation/gps/scratch/distance-nm") / symbol_map_range;
			var	bearing_to_wp = 360 - getprop("/instrumentation/gps/indicated-track-magnetic-deg") + getprop("/instrumentation/gps/scratch/mag-bearing-deg");

			var x_wp_fpl = math.cos(bearing_to_wp*math.pi/180) * distance_to_wp * offset_mul;
			var y_wp_fpl = math.sin(bearing_to_wp*math.pi/180) * distance_to_wp * offset_mul;
			
			setprop("/instrumentation/garmin196/symbols/paths/range_wp_"~i~"_"~(i+1)~"/x",x_wp_fpl);
			setprop("/instrumentation/garmin196/symbols/paths/range_wp_"~i~"_"~(i+1)~"/y",y_wp_fpl);

			var wp_bearing = 360 - getprop("/instrumentation/gps/indicated-track-true-deg") + getprop("/autopilot/route-manager/route/wp["~i~"]/leg-bearing-true-deg");
			var wp_distance = offset_range_wp_direct * getprop("/autopilot/route-manager/route/wp["~i~"]/leg-distance-nm") / symbol_map_range;
			
			var x_range_wp =(math.cos(wp_bearing*math.pi/180) * wp_distance) + ((x_wp_fpl/0.026)*0.15); #max 0.15
			if(math.abs(x_range_wp)>0.15){
				wp_distance = math.abs(((0.15*math.sgn(math.cos(wp_bearing*math.pi/180))) - ((x_wp_fpl/0.026)*0.15))/math.cos(wp_bearing*math.pi/180));
			}
			
			var y_range_wp =(math.sin(wp_bearing*math.pi/180) * wp_distance) + ((y_wp_fpl/0.0323)*0.18); #max 0.18
			if(math.abs(y_range_wp)>0.18){
				wp_distance = math.abs(((0.18*math.sgn(math.sin(wp_bearing*math.pi/180))) - ((y_wp_fpl/0.0323)*0.18))/math.sin(wp_bearing*math.pi/180));
			}
			
			setprop("/instrumentation/garmin196/symbols/paths/range_wp_"~i~"_"~(i+1)~"/range",wp_distance);
			setprop("/instrumentation/garmin196/symbols/paths/range_wp_"~i~"_"~(i+1)~"/bearing",wp_bearing);
			
			if(x_wp_fpl<0.026 and x_wp_fpl>-0.026 and y_wp_fpl<0.0323 and y_wp_fpl>-0.0323){##si on est dans l'ecran, on affiche
				setprop("/instrumentation/garmin196/symbols/paths/range_wp_"~i~"_"~(i+1)~"/visible",1);
			}else{
				setprop("/instrumentation/garmin196/symbols/paths/range_wp_"~i~"_"~(i+1)~"/visible",0);
			}
		}
		for(var i=nb_path;i<9;i=i+1){
			setprop("/instrumentation/garmin196/symbols/paths/range_wp_"~i~"_"~(i+1)~"/visible",0);
		}
		
	}
	if(getprop("/instrumentation/garmin196/serviceable")==1 and getprop("/instrumentation/garmin196/status")==10){
		settimer(update_map,1);
	}
}

var display_dto_recent = func{
	var waypoints = props.globals.getNode("/instrumentation/garmin196/waypoints/recent/",1);
	var i = 0;
	foreach (var e; waypoints.getChildren("wpt")) {
		var id = e.getChild("id").getValue();
		var type = e.getChild("type").getValue();
		var ligne = id;
		if(type=="wpt"){
			var type_wpt = substr(id,size(id)-6);
			if(type_wpt=="WPTTWN"){#cities
				ligne = substr(id,0,size(id)-8);
				ligne = substr(ligne,0,15);
			}elsif(type_wpt=="WPTUSR"){#wpt user
				ligne = substr(id,0,size(id)-6);
			}
		}
		
		ligne = ligne ~ " " ~ type;
		var ligne_spaces = "                              ";
		ligne_spaces = substr(ligne_spaces,0,15-size(ligne));
		
		props.globals.getNode("/instrumentation/gps/scratch/max-results", 1).setIntValue(1);
		props.globals.getNode("/instrumentation/gps/scratch/longitude-deg", 1).setDoubleValue(-9999);
		props.globals.getNode("/instrumentation/gps/scratch/latitude-deg", 1).setDoubleValue(-9999);
		setprop("/instrumentation/gps/scratch/type", type);
		setprop("/instrumentation/gps/scratch/query", id);
		setprop("/instrumentation/gps/command", "search");
		
		var range = getprop("/instrumentation/gps/scratch/distance-nm");
		var	bearing = getprop("/instrumentation/gps/scratch/mag-bearing-deg");
		
		ligne = ligne ~ ligne_spaces ~ sprintf(" %03.f",bearing);
		if(getprop("/instrumentation/garmin196/params/units/distance")==1){
			ligne = ligne ~sprintf(" %3.1fnm",range);
		}else{
			ligne = ligne ~sprintf(" %3.1fkm",range*1.852);
		}
		
		if(i==0){
			setprop("/instrumentation/garmin196/dto_display/ligne_select",ligne);
			props.globals.getNode("/instrumentation/garmin196/dto_display/ligne["~i~"]/selected",1).setBoolValue(1);
		}else{
			props.globals.getNode("/instrumentation/garmin196/dto_display/ligne["~i~"]/selected",1).setBoolValue(0);
		}
		setprop("/instrumentation/garmin196/dto_display/ligne["~i~"]/texte",ligne);
		setprop("/instrumentation/garmin196/dto_display/ligne["~i~"]/id",id);
		setprop("/instrumentation/garmin196/dto_display/ligne["~i~"]/type",type);
		i=i+1;
	}
	for(var j=i;j<5;j=j+1){
		setprop("/instrumentation/garmin196/dto_display/ligne["~j~"]/texte","");
		props.globals.getNode("/instrumentation/garmin196/dto_display/ligne["~j~"]/selected",1).setBoolValue(0);
		setprop("/instrumentation/garmin196/dto_display/ligne["~j~"]/id","");
		setprop("/instrumentation/garmin196/dto_display/ligne["~j~"]/type","");
	}
	setprop("/instrumentation/garmin196/dto_display/no_ligne_selected",0);
	setprop("/instrumentation/garmin196/dto_display/max_ligne_selected",i-1);
	if(i==0){
		setprop("/instrumentation/garmin196/dto_display/ligne_select","");
	}
}

var display_dto_user = func{
	var waypoints = props.globals.getNode("/instrumentation/garmin196/waypoints/user/",1);
	var i = 0;
	foreach (var e; waypoints.getChildren("wpt")) {
		var id = e.getChild("id").getValue()~"WPTUSR";
		var type = "wpt";
		var ligne = substr(id,0,size(id)-6);
		ligne = substr(ligne,0,14);	
		
		var ligne_spaces = "                              ";
		ligne_spaces = substr(ligne_spaces,0,14-size(ligne));
		
		props.globals.getNode("/instrumentation/gps/scratch/max-results", 1).setIntValue(1);
		props.globals.getNode("/instrumentation/gps/scratch/longitude-deg", 1).setDoubleValue(-9999);
		props.globals.getNode("/instrumentation/gps/scratch/latitude-deg", 1).setDoubleValue(-9999);
		setprop("/instrumentation/gps/scratch/type", type);
		setprop("/instrumentation/gps/scratch/query", id);
		setprop("/instrumentation/gps/command", "search");
		
		var range = getprop("/instrumentation/gps/scratch/distance-nm");
		var	bearing = getprop("/instrumentation/gps/scratch/mag-bearing-deg");
		
		ligne = ligne ~ ligne_spaces ~ sprintf(" %03.f",bearing);
		if(getprop("/instrumentation/garmin196/params/units/distance")==1){
			ligne = ligne ~sprintf(" %3.1fnm",range);
		}else{
			ligne = ligne ~sprintf(" %3.1fkm",range*1.852);
		}
		
		if(i==0){
			setprop("/instrumentation/garmin196/dto_display/ligne_select",ligne);
			props.globals.getNode("/instrumentation/garmin196/dto_display/ligne["~i~"]/selected",1).setBoolValue(1);
		}else{
			props.globals.getNode("/instrumentation/garmin196/dto_display/ligne["~i~"]/selected",1).setBoolValue(0);
		}
		setprop("/instrumentation/garmin196/dto_display/ligne["~i~"]/texte",ligne);
		setprop("/instrumentation/garmin196/dto_display/ligne["~i~"]/id",id);
		setprop("/instrumentation/garmin196/dto_display/ligne["~i~"]/type",type);
		i=i+1;
	}
	for(var j=i;j<5;j=j+1){
		setprop("/instrumentation/garmin196/dto_display/ligne["~j~"]/texte","");
		props.globals.getNode("/instrumentation/garmin196/dto_display/ligne["~j~"]/selected",1).setBoolValue(0);
		setprop("/instrumentation/garmin196/dto_display/ligne["~j~"]/id","");
		setprop("/instrumentation/garmin196/dto_display/ligne["~j~"]/type","");
	}
	setprop("/instrumentation/garmin196/dto_display/no_ligne_selected",0);
	setprop("/instrumentation/garmin196/dto_display/max_ligne_selected",i-1);
	if(i==0){
		setprop("/instrumentation/garmin196/dto_display/ligne_select","");
	}
}

var affectation_waypoint = func(id){
	setprop("/autopilot/route-manager/input","@CLEAR");
	setprop("/autopilot/route-manager/input","@POP");
	setprop("/autopilot/route-manager/input","@insert0:"~id);
	setprop("/autopilot/route-manager/input","@JUMP0");
	setprop("/autopilot/route-manager/input","@ACTIVATE");
}

var display_dto_search = func{
	var ligne_selected = getprop("/instrumentation/garmin196/dto_display/ligne_select");
	var x_char = props.globals.getNode("/instrumentation/garmin196/dto_display/x_char").getValue();
	ligne_selected = substr(ligne_selected,0,x_char);
	ligne_selected = ligne_selected ~ tab_chiffres_lettres[getprop("/instrumentation/garmin196/dto_display/y_char")];
	setprop("/instrumentation/garmin196/dto_display/ligne_select",ligne_selected);

	var plots = [];
	##recherche gps globale
	props.globals.getNode("/instrumentation/gps/scratch/max-results", 1).setIntValue(5);
	props.globals.getNode("/instrumentation/gps/scratch/longitude-deg", 1).setDoubleValue(-9999);
	props.globals.getNode("/instrumentation/gps/scratch/latitude-deg", 1).setDoubleValue(-9999);
	props.globals.getNode("/instrumentation/gps/scratch/exact", 1).setBoolValue(0);
	props.globals.getNode("/instrumentation/gps/scratch/query",1).setValue(ligne_selected);
	props.globals.getNode("/instrumentation/gps/scratch/type",1).setValue("");
	
	setprop("/instrumentation/gps/command", "search");
	var i=0;
	var flag_continue = getprop("/instrumentation/gps/scratch/valid");
	while (flag_continue and i<5) {
		var id = getprop("/instrumentation/gps/scratch/ident");
		var range = getprop("/instrumentation/gps/scratch/distance-nm");
		var bearing = getprop("/instrumentation/gps/scratch/mag-bearing-deg");
		var type = getprop("/instrumentation/gps/scratch/type");
		
		var ligne = id;
		if(type=="waypoint"){
			type = "wpt";
			var type_wpt = substr(id,size(id)-6);
			if(type_wpt=="WPTTWN"){#cities
				ligne = substr(id,0,size(id)-8);
			}elsif(type_wpt=="WPTUSR"){#wpt user
				ligne = substr(id,0,size(id)-6);
			}
		}
		
		ligne = ligne ~ " " ~ type;
		var ligne_spaces = "                              ";
		ligne_spaces = substr(ligne_spaces,0,16-size(ligne));
		
		ligne = ligne ~ ligne_spaces ~ sprintf(" %03.f",bearing);
		if(getprop("/instrumentation/garmin196/params/units/distance")==1){
			ligne = ligne ~sprintf("  %3.1fnm",range);
		}else{
			ligne = ligne ~sprintf("  %3.1fkm",range*1.852);
		}
		var popup_status = getprop("/instrumentation/garmin196/popup_status");
		
		
		var plot = { id: id,texte: ligne,type: type};
		append(plots,plot);
		
		i=i+1;
		setprop("/instrumentation/gps/command", "next");
		flag_continue = getprop("/instrumentation/gps/scratch/has-next");
	}
	
	##recherche gps fix
	props.globals.getNode("/instrumentation/gps/scratch/max-results", 1).setIntValue(5);
	props.globals.getNode("/instrumentation/gps/scratch/longitude-deg", 1).setDoubleValue(-9999);
	props.globals.getNode("/instrumentation/gps/scratch/latitude-deg", 1).setDoubleValue(-9999);
	props.globals.getNode("/instrumentation/gps/scratch/exact", 1).setBoolValue(0);
	props.globals.getNode("/instrumentation/gps/scratch/query",1).setValue(ligne_selected);
	props.globals.getNode("/instrumentation/gps/scratch/type",1).setValue("fix");
	
	setprop("/instrumentation/gps/command", "search");
	i=0;
	flag_continue = getprop("/instrumentation/gps/scratch/valid");
	while (flag_continue and i<5) {
		var id = getprop("/instrumentation/gps/scratch/ident");
		var range = getprop("/instrumentation/gps/scratch/distance-nm");
		var bearing = getprop("/instrumentation/gps/scratch/mag-bearing-deg");
		var type = getprop("/instrumentation/gps/scratch/type");
		
		var ligne = id ~ " " ~ type;
		var ligne_spaces = "                              ";
		ligne_spaces = substr(ligne_spaces,0,16-size(ligne));
		
		ligne = ligne ~ ligne_spaces ~ sprintf(" %03.f",bearing);
		if(getprop("/instrumentation/garmin196/params/units/distance")==1){
			ligne = ligne ~sprintf("  %3.1fnm",range);
		}else{
			ligne = ligne ~sprintf("  %3.1fkm",range*1.852);
		}
		var popup_status = getprop("/instrumentation/garmin196/popup_status");
		
		
		var plot = { id: id,texte: ligne,type: type};
		append(plots,plot);
		
		i=i+1;
		setprop("/instrumentation/gps/command", "next");
		flag_continue = getprop("/instrumentation/gps/scratch/has-next");
	}
	
	##recherche gps vor
	props.globals.getNode("/instrumentation/gps/scratch/max-results", 1).setIntValue(5);
	props.globals.getNode("/instrumentation/gps/scratch/longitude-deg", 1).setDoubleValue(-9999);
	props.globals.getNode("/instrumentation/gps/scratch/latitude-deg", 1).setDoubleValue(-9999);
	props.globals.getNode("/instrumentation/gps/scratch/exact", 1).setBoolValue(0);
	props.globals.getNode("/instrumentation/gps/scratch/query",1).setValue(ligne_selected);
	props.globals.getNode("/instrumentation/gps/scratch/type",1).setValue("vor");
	
	setprop("/instrumentation/gps/command", "search");
	i=0;
	flag_continue = getprop("/instrumentation/gps/scratch/valid");
	while (flag_continue and i<5) {
		var id = getprop("/instrumentation/gps/scratch/ident");
		var range = getprop("/instrumentation/gps/scratch/distance-nm");
		var bearing = getprop("/instrumentation/gps/scratch/mag-bearing-deg");
		var type = getprop("/instrumentation/gps/scratch/type");
		
		var ligne = id ~ " vor";
		var ligne_spaces = "                              ";
		ligne_spaces = substr(ligne_spaces,0,16-size(ligne));
		
		ligne = ligne ~ ligne_spaces ~ sprintf(" %03.f",bearing);
		if(getprop("/instrumentation/garmin196/params/units/distance")==1){
			ligne = ligne ~sprintf("  %3.1fnm",range);
		}else{
			ligne = ligne ~sprintf("  %3.1fkm",range*1.852);
		}
		var popup_status = getprop("/instrumentation/garmin196/popup_status");
		
		
		var plot = { id: id,texte: ligne,type: type};
		append(plots,plot);
		
		i=i+1;
		setprop("/instrumentation/gps/command", "next");
		flag_continue = getprop("/instrumentation/gps/scratch/has-next");
	}
	
	##recherche gps ndb
	props.globals.getNode("/instrumentation/gps/scratch/max-results", 1).setIntValue(5);
	props.globals.getNode("/instrumentation/gps/scratch/longitude-deg", 1).setDoubleValue(-9999);
	props.globals.getNode("/instrumentation/gps/scratch/latitude-deg", 1).setDoubleValue(-9999);
	props.globals.getNode("/instrumentation/gps/scratch/exact", 1).setBoolValue(0);
	props.globals.getNode("/instrumentation/gps/scratch/query",1).setValue(ligne_selected);
	props.globals.getNode("/instrumentation/gps/scratch/type",1).setValue("ndb");
	
	setprop("/instrumentation/gps/command", "search");
	i=0;
	flag_continue = getprop("/instrumentation/gps/scratch/valid");
	while (flag_continue and i<5) {
		var id = getprop("/instrumentation/gps/scratch/ident");
		var range = getprop("/instrumentation/gps/scratch/distance-nm");
		var bearing = getprop("/instrumentation/gps/scratch/mag-bearing-deg");
		var type = getprop("/instrumentation/gps/scratch/type");
		
		var ligne = id ~ " ndb";
		var ligne_spaces = "                              ";
		ligne_spaces = substr(ligne_spaces,0,16-size(ligne));
		
		ligne = ligne ~ ligne_spaces ~ sprintf(" %03.f",bearing);
		if(getprop("/instrumentation/garmin196/params/units/distance")==1){
			ligne = ligne ~sprintf("  %3.1fnm",range);
		}else{
			ligne = ligne ~sprintf("  %3.1fkm",range*1.852);
		}
		var popup_status = getprop("/instrumentation/garmin196/popup_status");
		
		
		var plot = { id: id,texte: ligne,type: type};
		append(plots,plot);
		
		i=i+1;
		setprop("/instrumentation/gps/command", "next");
		flag_continue = getprop("/instrumentation/gps/scratch/has-next");
	}
		
	var plots_sorted = sort (plots, func (a,b) cmp (a.id, b.id));
	var nb_plots = size(plots_sorted);
	if(nb_plots>5){
		nb_plots = 5;
	}
	for(var j=0;j<nb_plots;j=j+1){
		if(i==0 and popup_status!=10 and popup_status!=11){
			props.globals.getNode("/instrumentation/garmin196/dto_display/ligne["~i~"]/selected",1).setBoolValue(1);
		}else{
			props.globals.getNode("/instrumentation/garmin196/dto_display/ligne["~i~"]/selected",1).setBoolValue(0);
		}
		setprop("/instrumentation/garmin196/dto_display/ligne["~j~"]/texte",plots_sorted[j].texte);
		setprop("/instrumentation/garmin196/dto_display/ligne["~j~"]/id",plots_sorted[j].id);
		setprop("/instrumentation/garmin196/dto_display/ligne["~j~"]/type",plots_sorted[j].type);
	}

	for(var j=nb_plots;j<5;j=j+1){
		setprop("/instrumentation/garmin196/dto_display/ligne["~j~"]/texte","");
		props.globals.getNode("/instrumentation/garmin196/dto_display/ligne["~j~"]/selected",1).setBoolValue(0);
		setprop("/instrumentation/garmin196/dto_display/ligne["~j~"]/id","");
		setprop("/instrumentation/garmin196/dto_display/ligne["~j~"]/type","");
	}
	setprop("/instrumentation/garmin196/dto_display/no_ligne_selected",0);
	setprop("/instrumentation/garmin196/dto_display/max_ligne_selected",nb_plots-1);
}

var searchLastChar = func(chaine, char){
	var result = -1;
	var char_a_tester = substr(chaine,char,1);
	for(var i=0;i<size(tab_chiffres_lettres);i=i+1){
		if(tab_chiffres_lettres[i]==char_a_tester){
			result = i;
			break;
		}
	}
	return result;
}

var init_dto_display = func{
	for(var i=0;i<5;i=i+1){
		setprop("/instrumentation/garmin196/dto_display/ligne["~i~"]/texte","");
		props.globals.getNode("/instrumentation/garmin196/dto_display/ligne["~i~"]/selected",1).setBoolValue(0);
		setprop("/instrumentation/garmin196/dto_display/ligne["~i~"]/id","");
		setprop("/instrumentation/garmin196/dto_display/ligne["~i~"]/type","");
	}
}

var init_nrst_display = func{
	for(var i=0;i<5;i=i+1){
		setprop("/instrumentation/garmin196/nrst_display/ligne["~i~"]/texte","");
		props.globals.getNode("/instrumentation/garmin196/nrst_display/ligne["~i~"]/selected",1).setBoolValue(0);
		setprop("/instrumentation/garmin196/nrst_display/ligne["~i~"]/id","");
		setprop("/instrumentation/garmin196/nrst_display/ligne["~i~"]/type","");
	}
}

var display_nrst = func(type){
	if(type=="wpt"){
		props.globals.getNode("/instrumentation/gps/scratch/max-results", 1).setIntValue(25);
		props.globals.getNode("/instrumentation/gps/scratch/longitude-deg", 1).setDoubleValue(-9999);
		props.globals.getNode("/instrumentation/gps/scratch/latitude-deg", 1).setDoubleValue(-9999);
		#props.globals.getNode("/instrumentation/gps/scratch/exact", 1).setBoolValue(1);
		props.globals.getNode("/instrumentation/gps/scratch/type",1).setValue(type);
		setprop("/instrumentation/gps/command", "nearest");
		var i=0;
		var flag_continue = getprop("/instrumentation/gps/scratch/valid");
		while (flag_continue and i<5) {
			var id = getprop("/instrumentation/gps/scratch/ident");
			var range = getprop("/instrumentation/gps/scratch/distance-nm");
			var	bearing = getprop("/instrumentation/gps/scratch/mag-bearing-deg");

			var type_wpt = substr(id,size(id)-6);
			if(type_wpt=="WPTTWN"){
				var ligne = substr(id,0,size(id)-8);
			}elsif(type_wpt=="WPTUSR"){
				var ligne = substr(id,0,size(id)-6);
			}
			ligne = substr(ligne,0,18);
			var ligne_spaces = "                              ";
			ligne_spaces = substr(ligne_spaces,0,18-size(ligne));
			ligne = ligne ~ ligne_spaces ~ sprintf(" %03.f",bearing);
			if(getprop("/instrumentation/garmin196/params/units/distance")==1){
				ligne = ligne ~sprintf(" %3.1fnm",range);
			}else{
				ligne = ligne ~sprintf(" %3.1fkm",range*1.852);
			}
			
			if(i==0){
				setprop("/instrumentation/garmin196/nrst_display/ligne_select",ligne);
				props.globals.getNode("/instrumentation/garmin196/nrst_display/ligne["~i~"]/selected",1).setBoolValue(1);
			}else{
				props.globals.getNode("/instrumentation/garmin196/nrst_display/ligne["~i~"]/selected",1).setBoolValue(0);
			}
			setprop("/instrumentation/garmin196/nrst_display/ligne["~i~"]/texte",ligne);
			setprop("/instrumentation/garmin196/nrst_display/ligne["~i~"]/id",id);
			setprop("/instrumentation/garmin196/nrst_display/ligne["~i~"]/type",type);
			i=i+1;

			setprop("/instrumentation/gps/command", "next");
			flag_continue = getprop("/instrumentation/gps/scratch/has-next");
		}
		setprop("/instrumentation/garmin196/nrst_display/no_ligne_selected",0);
		setprop("/instrumentation/garmin196/nrst_display/max_ligne_selected",(i-1));
				
	}else{
		props.globals.getNode("/instrumentation/gps/scratch/max-results", 1).setIntValue(6);
		props.globals.getNode("/instrumentation/gps/scratch/longitude-deg", 1).setDoubleValue(-9999);
		props.globals.getNode("/instrumentation/gps/scratch/latitude-deg", 1).setDoubleValue(-9999);
		#props.globals.getNode("/instrumentation/gps/scratch/exact", 1).setBoolValue(1);
		props.globals.getNode("/instrumentation/gps/scratch/type",1).setValue(type);
		props.globals.getNode("/instrumentation/gps/scratch").removeChildren("runways");
		setprop("/instrumentation/gps/command", "nearest");
		var i=0;
		var flag_continue = getprop("/instrumentation/gps/scratch/valid");
		while (flag_continue and i<5) {
			var id = getprop("/instrumentation/gps/scratch/ident");
			var ligne = id;
			var range = getprop("/instrumentation/gps/scratch/distance-nm");
			var	bearing = getprop("/instrumentation/gps/scratch/mag-bearing-deg");
			var ligne_spaces = "                              ";
			ligne_spaces = substr(ligne_spaces,0,6-size(ligne));
			ligne = ligne ~ ligne_spaces ~ sprintf(" %03.f",bearing);
			if(getprop("/instrumentation/garmin196/params/units/distance")==1){
				ligne = ligne ~sprintf(" %3.1fnm",range);
			}else{
				ligne = ligne ~sprintf(" %3.1fkm",range*1.852);
			}
			if(type=="airport"){
				var runways = props.globals.getNode("/instrumentation/gps/scratch",1);
				var max_length = 0;
				foreach (var e; runways.getChildren("runways")) {
					var runway_length = e.getChild("length-ft").getValue();
					if(runway_length>max_length){
						max_length = runway_length;
					}
				}
				if(getprop("/instrumentation/garmin196/params/units/distance")==1){
					ligne = ligne ~ " " ~ sprintf("%4.0fft",max_length);
				}else{
					ligne = ligne ~ " " ~ sprintf("%4.0fm",max_length*0.3048);
				}
				
				var radio = getprop("/instrumentation/garmin196/airports_atis/id_"~id);
				if(radio!=nil){
					ligne = ligne ~ sprintf(" %3.2f",radio);
				}
			}elsif(type=="vor"){
				ligne = ligne ~ " " ~ sprintf("%2.2f",getprop('/instrumentation/gps/scratch/frequency-mhz'));
			}elsif(type=="ndb"){
				ligne = ligne ~ " " ~ sprintf("%2.1f",getprop('/instrumentation/gps/scratch/frequency-khz'));
			}
			if(i==0){
				setprop("/instrumentation/garmin196/nrst_display/ligne_select",ligne);
				props.globals.getNode("/instrumentation/garmin196/nrst_display/ligne["~i~"]/selected",1).setBoolValue(1);
			}else{
				props.globals.getNode("/instrumentation/garmin196/nrst_display/ligne["~i~"]/selected",1).setBoolValue(0);
			}
			setprop("/instrumentation/garmin196/nrst_display/ligne["~i~"]/texte",ligne);
			setprop("/instrumentation/garmin196/nrst_display/ligne["~i~"]/id",id);
			setprop("/instrumentation/garmin196/nrst_display/ligne["~i~"]/type",type);
			i=i+1;
			
			props.globals.getNode("/instrumentation/gps/scratch").removeChildren("runways");
			setprop("/instrumentation/gps/command", "next");
			flag_continue = getprop("/instrumentation/gps/scratch/has-next");
		}
		setprop("/instrumentation/garmin196/nrst_display/no_ligne_selected",0);
		setprop("/instrumentation/garmin196/nrst_display/max_ligne_selected",(i-1));
	}
}

var load_cities = func{
	print("Garmin 196 loading cities");
	fgcommand("loadxml", props.Node.new({ filename: getprop("/sim/fg-root")~"/Aircraft/Instruments-3d/garmin196/cities.xml", targetnode: "/instrumentation/garmin196/cities" }));
	var waypoints = props.globals.getNode("/instrumentation/garmin196/cities/waypoints",1);
	foreach (var e; waypoints.getChildren("waypoint")) {
		var id = e.getChild("id").getValue();
		var latitude = e.getChild("latitude").getValue();
		var longitude = e.getChild("longitude").getValue();
		
		props.globals.getNode("/instrumentation/gps/scratch/longitude-deg", 1).setDoubleValue(longitude);
		props.globals.getNode("/instrumentation/gps/scratch/latitude-deg", 1).setDoubleValue(latitude);
		props.globals.getNode("/instrumentation/gps/scratch/ident",1).setValue(id);
		setprop("/instrumentation/gps/command","define-user-wpt");
	}
	props.globals.getNode("/instrumentation/garmin196").removeChildren("cities");
	
	
	print("Garmin 196 loading cities done");
}

var update_wp_id_display=func{
	var id=getprop("/autopilot/route-manager/wp[0]/id");
	if(size(id)>6){
		var type_wpt=substr(id,size(id)-6);
		if(type_wpt=="WPTTWN"){#cities
			id=substr(id,0,size(id)-8);
			id=substr(id,0,13);
		}elsif(type_wpt=="WPTUSR"){#wpt user
			id=substr(id,0,size(id)-6);
		}
	}
	setprop("/instrumentation/garmin196/panel-wpt-id",id);
	setprop("/instrumentation/garmin196/position-wpt-id",id);
	
	##stockage des coordonnees pour la vnav
	setprop("/instrumentation/gps/scratch/max-results",1);
	setprop("/instrumentation/gps/scratch/longitude-deg",-9999);
	setprop("/instrumentation/gps/scratch/latitude-deg",-9999);
	setprop("/instrumentation/gps/scratch/type", "");
	setprop("/instrumentation/gps/scratch/query", id);
	setprop("/instrumentation/gps/command", "search");
			
	if(getprop("/instrumentation/gps/scratch/type")=="airport"){
	  ##stockage des coordonnees du waypoint pour vnav
	  props.globals.getNode("/instrumentation/garmin196/vnav/longitude",1).setDoubleValue(getprop("/instrumentation/gps/scratch/longitude-deg"));
	  props.globals.getNode("/instrumentation/garmin196/vnav/latitude",1).setDoubleValue(getprop("/instrumentation/gps/scratch/latitude-deg"));
	  props.globals.getNode("/instrumentation/garmin196/vnav/altitude-m",1).setDoubleValue(getprop("/instrumentation/gps/scratch/altitude-ft") * 0.3048);
	  props.globals.getNode("/instrumentation/garmin196/vnav/visible",1).setBoolValue(1);
	}else{
	  props.globals.getNode("/instrumentation/garmin196/vnav/visible",1).setBoolValue(0);
	}

}
setlistener("/autopilot/route-manager/wp[0]/id",update_wp_id_display);

var init_list_aircraft = func{
	var aircrafts = props.globals.getNode("/instrumentation/garmin196/params/aircrafts",1);
	var i = 0;
	foreach (var e; aircrafts.getChildren("aircraft")) {
		setprop("/instrumentation/garmin196/menu_aircraft/aircraft["~i~"]/texte",e.getChild("name").getValue());
		i=i+1;
	}
	
	for(var j=i;j<6;j=j+1){
		setprop("/instrumentation/garmin196/menu_aircraft/aircraft["~j~"]/texte","");
	}
	
	if(i<6){
		setprop("/instrumentation/garmin196/menu_aircraft/aircraft["~i~"]/texte","ENTER TO ADD AIRCRAFT");
	}else{
		i=5;
	}
	setprop("/instrumentation/garmin196/menu_aircraft/max_no_ligne",i);
}

var init_new_aircraft = func(no_aircraft){
	props.globals.getNode("/instrumentation/garmin196/params/aircrafts/aircraft["~no_aircraft~"]/name", 1).setValue("AIRCRAFT");
	props.globals.getNode("/instrumentation/garmin196/params/aircrafts/aircraft["~no_aircraft~"]/max-speed", 1).setIntValue(150);
	props.globals.getNode("/instrumentation/garmin196/params/aircrafts/aircraft["~no_aircraft~"]/cruise-speed", 1).setIntValue(120);
	props.globals.getNode("/instrumentation/garmin196/params/aircrafts/aircraft["~no_aircraft~"]/fuel-flow", 1).setIntValue(5);
}

var delete_aircraft = func(no_aircraft){
	for(var i=no_aircraft+1;i<6;i=i+1){
		if(getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~i~"]/name")!=nil){
			setprop("/instrumentation/garmin196/params/aircrafts/aircraft["~(i-1)~"]/name",getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~i~"]/name"));
			setprop("/instrumentation/garmin196/params/aircrafts/aircraft["~(i-1)~"]/max-speed",getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~i~"]/max-speed"));
			setprop("/instrumentation/garmin196/params/aircrafts/aircraft["~(i-1)~"]/cruise-speed",getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~i~"]/cruise-speed"));
			setprop("/instrumentation/garmin196/params/aircrafts/aircraft["~(i-1)~"]/fuel-flow",getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~i~"]/fuel-flow"));
		}
	}
	var nb_aircraft = size(props.globals.getNode("/instrumentation/garmin196/params/aircrafts",1).getChildren("aircraft"));
	if(getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~no_aircraft~"]/name")!=nil){
		props.globals.getNode("/instrumentation/garmin196/params/aircrafts/aircraft["~(nb_aircraft-1)~"]").remove();
	}
	
	setprop("/instrumentation/garmin196/no_aircraft",no_aircraft-1);
	save_parameters();
}

var display_list_aircraft = func{
	var no_ligne = getprop("/instrumentation/garmin196/menu_aircraft/no_ligne_selected");
	if(no_ligne==-1){
		no_ligne = getprop("/instrumentation/garmin196/no_aircraft");
	}
	var aircraft_display = "";
	if(getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~no_ligne~"]/max-speed")!=nil){
		var max_speed = getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~no_ligne~"]/max-speed");
		var name = getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~no_ligne~"]/name");
		setprop("/instrumentation/garmin196/max-speed",max_speed);
		setprop("/instrumentation/garmin196/cruise-speed",getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~no_ligne~"]/cruise-speed"));
		setprop("/instrumentation/garmin196/fuel-flow",getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~no_ligne~"]/fuel-flow"));
		setprop("/instrumentation/garmin196/no_aircraft",no_ligne);
		
		aircraft_display = name ~ "    vmax=";
		if(getprop("/instrumentation/garmin196/params/units/speed")==1){
			aircraft_display = aircraft_display ~ max_speed ~"kt";
		}else{
			aircraft_display = aircraft_display ~ sprintf("%3.0f",(max_speed*1.852)) ~"km/h";
		}
	}else{
		aircraft_display = "NEW AIRCRAFT";
	}
	setprop("/instrumentation/garmin196/menu_aircraft/text",aircraft_display);
}

var init_menu_aircraft = func{
	var no_ligne = getprop("/instrumentation/garmin196/menu_aircraft/no_ligne_selected");
	
	setprop("/instrumentation/garmin196/menu_aircraft/selected-name",getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~no_ligne~"]/name"));
	setprop("/instrumentation/garmin196/menu_aircraft/selected-max",getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~no_ligne~"]/max-speed"));
	setprop("/instrumentation/garmin196/menu_aircraft/selected-cruise",getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~no_ligne~"]/cruise-speed"));
	setprop("/instrumentation/garmin196/menu_aircraft/selected-fuelflow",getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~no_ligne~"]/fuel-flow"));
					
	setprop("/instrumentation/garmin196/menu_aircraft/x_char",size(getprop("/instrumentation/garmin196/menu_aircraft/selected-name"))-1);
	setprop("/instrumentation/garmin196/menu_aircraft/y_char",searchLastChar(getprop("/instrumentation/garmin196/menu_aircraft/selected-name"),getprop("/instrumentation/garmin196/menu_aircraft/x_char")));
	display_menu_aircraft();
}

var validate_menu_aircraft=func{
	var no_ligne = getprop("/instrumentation/garmin196/menu_aircraft/no_ligne_selected");
	
	setprop("/instrumentation/garmin196/params/aircrafts/aircraft["~no_ligne~"]/name",getprop("/instrumentation/garmin196/menu_aircraft/selected-name"));
	setprop("/instrumentation/garmin196/params/aircrafts/aircraft["~no_ligne~"]/max-speed",getprop("/instrumentation/garmin196/menu_aircraft/selected-max"));
	setprop("/instrumentation/garmin196/params/aircrafts/aircraft["~no_ligne~"]/cruise-speed",getprop("/instrumentation/garmin196/menu_aircraft/selected-cruise"));
	setprop("/instrumentation/garmin196/params/aircrafts/aircraft["~no_ligne~"]/fuel-flow",getprop("/instrumentation/garmin196/menu_aircraft/selected-fuelflow"));
	save_parameters();
}

var display_menu_aircraft=func{
	if(getprop("/instrumentation/garmin196/params/units/speed")==1){
		setprop("/instrumentation/garmin196/menu_aircraft/selected-max-display",getprop("/instrumentation/garmin196/menu_aircraft/selected-max")~"kt");
		setprop("/instrumentation/garmin196/menu_aircraft/selected-cruise-display",getprop("/instrumentation/garmin196/menu_aircraft/selected-cruise")~"kt");
	}else{
		setprop("/instrumentation/garmin196/menu_aircraft/selected-max-display",sprintf("%3.0fkm/h",getprop("/instrumentation/garmin196/menu_aircraft/selected-max")*1.852));
		setprop("/instrumentation/garmin196/menu_aircraft/selected-cruise-display",sprintf("%3.0fkm/h",getprop("/instrumentation/garmin196/menu_aircraft/selected-cruise")*1.852));
	}
}

var display_menu_aircraft_name = func{
	var ligne_selected = getprop("/instrumentation/garmin196/menu_aircraft/selected-name");
	var x_char = props.globals.getNode("/instrumentation/garmin196/menu_aircraft/x_char").getValue();
	ligne_selected = substr(ligne_selected,0,x_char);
	ligne_selected = ligne_selected ~ tab_chiffres_lettres[getprop("/instrumentation/garmin196/menu_aircraft/y_char")];
	setprop("/instrumentation/garmin196/menu_aircraft/selected-name",ligne_selected);
}

var display_menu_flights = func{
	var flights = props.globals.getNode("/instrumentation/garmin196/flights",1);
	var i = 0;
	foreach (var e; flights.getChildren("flight")) {
		var start = e.getChild("start").getValue();
		var end = e.getChild("end").getValue();
		var date = e.getChild("date").getValue();
		var aircraft = e.getChild("aircraft").getValue();
		var distance = e.getChild("distance").getValue();
		var duration = e.getChild("duration").getValue();
		
		if(getprop("/instrumentation/garmin196/params/units/distance")==1){
			distance = sprintf("%03.1fnm",distance);
		}else{
			distance = sprintf("%03.1fkm",distance*1.852);
		}
		var ligne = sprintf("%s to %s    %s",start,end,date);
		
		setprop("/instrumentation/garmin196/menu_flights/ligne["~i~"]/texte",ligne);
		setprop("/instrumentation/garmin196/menu_flights/ligne["~i~"]/start",start);
		setprop("/instrumentation/garmin196/menu_flights/ligne["~i~"]/end",end);
		setprop("/instrumentation/garmin196/menu_flights/ligne["~i~"]/date",date);
		setprop("/instrumentation/garmin196/menu_flights/ligne["~i~"]/aircraft",aircraft);
		setprop("/instrumentation/garmin196/menu_flights/ligne["~i~"]/distance",distance);
		setprop("/instrumentation/garmin196/menu_flights/ligne["~i~"]/duration",sprintf("%03.1fh",duration));
		
		i=i+1;
	}
	for(var j=i;j<8;j=j+1){
		setprop("/instrumentation/garmin196/menu_flights/ligne["~j~"]/texte","");
	}
	setprop("/instrumentation/garmin196/menu_flights/max_ligne_selected",i-1);
}

var update_menu_flights_detail = func{
	var no_ligne = getprop("/instrumentation/garmin196/menu_flights/no_ligne_selected");
	setprop("/instrumentation/garmin196/menu_flights/ligne_selected/texte",getprop("/instrumentation/garmin196/menu_flights/ligne["~no_ligne~"]/start")~" to "~getprop("/instrumentation/garmin196/menu_flights/ligne["~no_ligne~"]/end"));
	setprop("/instrumentation/garmin196/menu_flights/ligne_selected/date",getprop("/instrumentation/garmin196/menu_flights/ligne["~no_ligne~"]/date"));
	setprop("/instrumentation/garmin196/menu_flights/ligne_selected/aircraft",getprop("/instrumentation/garmin196/menu_flights/ligne["~no_ligne~"]/aircraft"));
	setprop("/instrumentation/garmin196/menu_flights/ligne_selected/distance",getprop("/instrumentation/garmin196/menu_flights/ligne["~no_ligne~"]/distance"));
	setprop("/instrumentation/garmin196/menu_flights/ligne_selected/duration",getprop("/instrumentation/garmin196/menu_flights/ligne["~no_ligne~"]/duration"));
}

var update_flight = func{
	if(getprop("/instrumentation/garmin196/flight/inflight")==nil){
		props.globals.getNode("/instrumentation/garmin196/flight/inflight",1).setBoolValue(0);
		props.globals.getNode("/instrumentation/garmin196/flight/start",1).setValue("");
	}

	var inflight = getprop("/instrumentation/garmin196/flight/inflight");
	var speed = getprop("/instrumentation/gps/indicated-ground-speed-kt");
	if(inflight==1){
		if(speed<30){#speed<30kt, flight saved
			
			props.globals.getNode("/instrumentation/gps/scratch/max-results", 1).setIntValue(1);
			props.globals.getNode("/instrumentation/gps/scratch/longitude-deg", 1).setDoubleValue(-9999);
			props.globals.getNode("/instrumentation/gps/scratch/latitude-deg", 1).setDoubleValue(-9999);
			props.globals.getNode("/instrumentation/gps/scratch/type",1).setValue("airport");
			setprop("/instrumentation/gps/command", "nearest");
			var id = getprop("/instrumentation/gps/scratch/ident");
			props.globals.getNode("/instrumentation/garmin196/flight/end",1).setValue(id);
			props.globals.getNode("/instrumentation/garmin196/flight/distance",1).setDoubleValue(getprop("/instrumentation/gps/trip-odometer"));
			props.globals.getNode("/instrumentation/garmin196/flight/duration",1).setDoubleValue((getprop("/sim/time/elapsed-sec")-getprop("/instrumentation/garmin196/flight/start-time"))/3600);
			setprop("/instrumentation/garmin196/flight/inflight",0);
			
			##inscription dans le carnet de vol
			for(var i=7;i>0;i=i-1){
				if(getprop("/instrumentation/garmin196/flights/flight["~(i-1)~"]/start")!=nil){
					props.globals.getNode("/instrumentation/garmin196/flights/flight["~i~"]/start",1).setValue(getprop("/instrumentation/garmin196/flights/flight["~(i-1)~"]/start"));
					props.globals.getNode("/instrumentation/garmin196/flights/flight["~i~"]/end",1).setValue(getprop("/instrumentation/garmin196/flights/flight["~(i-1)~"]/end"));
					props.globals.getNode("/instrumentation/garmin196/flights/flight["~i~"]/date",1).setValue(getprop("/instrumentation/garmin196/flights/flight["~(i-1)~"]/date"));
					props.globals.getNode("/instrumentation/garmin196/flights/flight["~i~"]/aircraft",1).setValue(getprop("/instrumentation/garmin196/flights/flight["~(i-1)~"]/aircraft"));
					props.globals.getNode("/instrumentation/garmin196/flights/flight["~i~"]/distance",1).setDoubleValue(getprop("/instrumentation/garmin196/flights/flight["~(i-1)~"]/distance"));
					props.globals.getNode("/instrumentation/garmin196/flights/flight["~i~"]/duration",1).setDoubleValue(getprop("/instrumentation/garmin196/flights/flight["~(i-1)~"]/duration"));
				}
			}
			props.globals.getNode("/instrumentation/garmin196/flights/flight[0]/start",1).setValue(getprop("/instrumentation/garmin196/flight/start"));
			props.globals.getNode("/instrumentation/garmin196/flights/flight[0]/end",1).setValue(getprop("/instrumentation/garmin196/flight/end"));
			props.globals.getNode("/instrumentation/garmin196/flights/flight[0]/date",1).setValue(getprop("/instrumentation/garmin196/flight/date"));
			props.globals.getNode("/instrumentation/garmin196/flights/flight[0]/aircraft",1).setValue(getprop("/instrumentation/garmin196/flight/aircraft"));
			props.globals.getNode("/instrumentation/garmin196/flights/flight[0]/distance",1).setDoubleValue(getprop("/instrumentation/garmin196/flight/distance"));
			props.globals.getNode("/instrumentation/garmin196/flights/flight[0]/duration",1).setDoubleValue(getprop("/instrumentation/garmin196/flight/duration"));
			display_menu_flights();
			save_parameters();
		}
	}else{
		if(speed>30){#speed>30kt, flight started
			props.globals.getNode("/instrumentation/gps/scratch/max-results", 1).setIntValue(1);
			props.globals.getNode("/instrumentation/gps/scratch/longitude-deg", 1).setDoubleValue(-9999);
			props.globals.getNode("/instrumentation/gps/scratch/latitude-deg", 1).setDoubleValue(-9999);
			props.globals.getNode("/instrumentation/gps/scratch/type",1).setValue("airport");
			setprop("/instrumentation/gps/command", "nearest");
			var id = getprop("/instrumentation/gps/scratch/ident");
			props.globals.getNode("/instrumentation/garmin196/flight/start",1).setValue(id);
			var no_aircraft = getprop("/instrumentation/garmin196/no_aircraft");
			var aircraft = getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~no_aircraft~"]/name");
			if(aircraft==nil){
				props.globals.getNode("/instrumentation/garmin196/flight/aircraft",1).setValue("NO AIRCRAFT");
			}else{
				props.globals.getNode("/instrumentation/garmin196/flight/aircraft",1).setValue(aircraft);
			}
			props.globals.getNode("/instrumentation/garmin196/flight/date",1).setValue(substr(getprop("/sim/time/gmt"),0,10));
			props.globals.getNode("/instrumentation/garmin196/flight/start-time",1).setDoubleValue(getprop("/sim/time/elapsed-sec"));
			setprop("/instrumentation/gps/trip-odometer",0);
			setprop("/instrumentation/garmin196/flight/inflight",1);
		}
	}
}

var update_e6b_menu=func{
	var status = getprop("/instrumentation/garmin196/status");
	if(status==150){
		if(getprop("/instrumentation/garmin196/params/units/pressure")==1){
			setprop("/instrumentation/garmin196/menu_e6b/baro-pressure",sprintf("%2.2fInHg",getprop("/environment/pressure-sea-level-inhg")));
		}else{
			setprop("/instrumentation/garmin196/menu_e6b/baro-pressure",sprintf("%4.0fhPa",getprop("/environment/pressure-sea-level-inhg")/0.03));
		}
		
		var diff_speed = getprop("/instrumentation/gps/indicated-ground-speed-kt") - getprop("/velocities/airspeed-kt");
		if(getprop("/instrumentation/garmin196/params/units/speed")==1){
			setprop("/instrumentation/garmin196/menu_e6b/wind-speed",sprintf("%1.0fkt",getprop("/environment/wind-speed-kt")));
			setprop("/instrumentation/garmin196/menu_e6b/calibrated-airspeed",sprintf("%1.0fkt",getprop("/instrumentation/gps/indicated-ground-speed-kt")));
			setprop("/instrumentation/garmin196/menu_e6b/true-airspeed",sprintf("%1.0fkt",getprop("/velocities/airspeed-kt")));
			setprop("/instrumentation/garmin196/menu_e6b/head-wind",sprintf("%1.0fkt",diff_speed));
		}else{
			setprop("/instrumentation/garmin196/menu_e6b/wind-speed",sprintf("%1.0fkm/h",getprop("/environment/wind-speed-kt")*1.852));
			setprop("/instrumentation/garmin196/menu_e6b/calibrated-airspeed",sprintf("%1.0fkm/h",getprop("/instrumentation/gps/indicated-ground-speed-kt")*1.852));
			setprop("/instrumentation/garmin196/menu_e6b/true-airspeed",sprintf("%1.0fkm/h",getprop("/velocities/airspeed-kt")*1.852));
			setprop("/instrumentation/garmin196/menu_e6b/head-wind",sprintf("%1.0fkm/h",diff_speed*1.852));
		}
		
		if(getprop("/instrumentation/garmin196/params/units/altitude")==1){
			setprop("/instrumentation/garmin196/menu_e6b/indicated-altitude",sprintf("%1.0fft",getprop("/instrumentation/gps/indicated-altitude-ft")));
			setprop("/instrumentation/garmin196/menu_e6b/density-altitude",sprintf("%1.0fft",getprop("/position/altitude-ft")));
		}else{
			setprop("/instrumentation/garmin196/menu_e6b/indicated-altitude",sprintf("%1.0fm",getprop("/instrumentation/gps/indicated-altitude-ft")*0.1097));
			setprop("/instrumentation/garmin196/menu_e6b/density-altitude",sprintf("%1.0fm",getprop("/position/altitude-ft")*0.1097));
		}

		if(getprop("/instrumentation/garmin196/params/units/temperature")==1){
			setprop("/instrumentation/garmin196/menu_e6b/air-temp",sprintf("%1.1fC",getprop("/environment/temperature-degc")));
		}else{
			setprop("/instrumentation/garmin196/menu_e6b/air-temp",sprintf("%1.1fF",getprop("/environment/temperature-degf")));
		}
		setprop("/instrumentation/garmin196/menu_e6b/wind-from",sprintf("%1.0f",getprop("/environment/wind-from-heading-deg")));
		setprop("/instrumentation/garmin196/menu_e6b/heading",sprintf("%1.0f",getprop("/orientation/heading-deg")));
	}
}

var init_list_points = func{
	var points = props.globals.getNode("/instrumentation/garmin196/waypoints/user/",1);
	var i = 0;
	foreach (var e; points.getChildren("wpt")) {
		setprop("/instrumentation/garmin196/menu_points/point["~i~"]/texte",e.getChild("id").getValue());
		i=i+1;
	}
	
	for(var j=i;j<9;j=j+1){
		setprop("/instrumentation/garmin196/menu_points/point["~j~"]/texte","");
	}
	
	if(i<9){
		setprop("/instrumentation/garmin196/menu_points/point["~i~"]/texte","ENTER TO ADD WAYPOINT");
	}else{
		i=8;
	}
	setprop("/instrumentation/garmin196/menu_points/max_no_ligne",i);
}

var init_new_point = func(no_point){
	props.globals.getNode("/instrumentation/garmin196/waypoints/user/wpt["~no_point~"]/id", 1).setValue("POINT");
	props.globals.getNode("/instrumentation/garmin196/waypoints/user/wpt["~no_point~"]/latitude", 1).setDoubleValue(getprop("/position/latitude-deg"));
	props.globals.getNode("/instrumentation/garmin196/waypoints/user/wpt["~no_point~"]/longitude", 1).setDoubleValue(getprop("/position/longitude-deg"));
}

var delete_point = func(no_point){
	for(var i=no_point+1;i<9;i=i+1){
		if(getprop("/instrumentation/garmin196/waypoints/user/wpt["~i~"]/id")!=nil){
			setprop("/instrumentation/garmin196/waypoints/user/wpt["~(i-1)~"]/id",getprop("/instrumentation/garmin196/waypoints/user/wpt["~i~"]/id"));
			setprop("/instrumentation/garmin196/waypoints/user/wpt["~(i-1)~"]/latitude",getprop("/instrumentation/garmin196/waypoints/user/wpt["~i~"]/latitude"));
			setprop("/instrumentation/garmin196/waypoints/user/wpt["~(i-1)~"]/longitude",getprop("/instrumentation/garmin196/waypoints/user/wpt["~i~"]/longitude"));
		}
	}
	var nb_points = size(props.globals.getNode("/instrumentation/garmin196/waypoints/user/",1).getChildren("wpt"));
	if(getprop("/instrumentation/garmin196/waypoints/user/wpt["~no_point~"]/id")!=nil){
		props.globals.getNode("/instrumentation/garmin196/waypoints/user/wpt["~(nb_points-1)~"]").remove();
	}
	save_parameters();
}

var update_menu_points = func{
	var no_ligne = getprop("/instrumentation/garmin196/menu_points/no_ligne_selected");
	var name = getprop("/instrumentation/garmin196/waypoints/user/wpt["~no_ligne~"]/id");
	var latitude = getprop("/instrumentation/garmin196/waypoints/user/wpt["~no_ligne~"]/latitude");
	var longitude = getprop("/instrumentation/garmin196/waypoints/user/wpt["~no_ligne~"]/longitude");
	
	setprop("/instrumentation/garmin196/menu_points/name",name);
	props.globals.getNode("/instrumentation/garmin196/menu_points/longitude", 1).setDoubleValue(longitude);
	props.globals.getNode("/instrumentation/garmin196/menu_points/latitude", 1).setDoubleValue(latitude);
	setprop("/instrumentation/garmin196/menu_points/x_char",size(getprop("/instrumentation/garmin196/menu_points/name"))-1);
	setprop("/instrumentation/garmin196/menu_points/y_char",searchLastChar(getprop("/instrumentation/garmin196/menu_points/name"),getprop("/instrumentation/garmin196/menu_points/x_char")));
	display_menu_points();
}

var validate_menu_points = func{
	var no_ligne = getprop("/instrumentation/garmin196/menu_points/no_ligne_selected");
	
	var id = getprop("/instrumentation/garmin196/menu_points/name");
	var latitude = getprop("/instrumentation/garmin196/menu_points/latitude");
	var longitude = getprop("/instrumentation/garmin196/menu_points/longitude");
	setprop("/instrumentation/garmin196/waypoints/user/wpt["~no_ligne~"]/id",id);
	setprop("/instrumentation/garmin196/waypoints/user/wpt["~no_ligne~"]/latitude",latitude);
	setprop("/instrumentation/garmin196/waypoints/user/wpt["~no_ligne~"]/longitude",longitude);
	props.globals.getNode("/instrumentation/gps/scratch/longitude-deg", 1).setDoubleValue(longitude);
	props.globals.getNode("/instrumentation/gps/scratch/latitude-deg", 1).setDoubleValue(latitude);
	props.globals.getNode("/instrumentation/gps/scratch/ident",1).setValue(id~"WPTUSR");
	setprop("/instrumentation/gps/command","define-user-wpt");
	update_menu_points();
	save_parameters();
}

var display_menu_points = func{
	var ligne_selected = getprop("/instrumentation/garmin196/menu_points/name");
	var x_char = props.globals.getNode("/instrumentation/garmin196/menu_points/x_char").getValue();
	ligne_selected = substr(ligne_selected,0,x_char);
	ligne_selected = ligne_selected ~ tab_chiffres_lettres[getprop("/instrumentation/garmin196/menu_points/y_char")];
	setprop("/instrumentation/garmin196/menu_points/name",ligne_selected);

	var latitude = getprop("/instrumentation/garmin196/menu_points/latitude");
	var latitude_tab = split(".",sprintf("%3.2f",math.abs(latitude)));
	var latitude_text10 = latitude_tab[0];
	var latitude_text1 = "00";
	if(size(latitude_tab)>1){
		latitude_text1 = sprintf("%0.2s",latitude_tab[1]);
	}
	if(latitude>=0){
		latitude_text10 = "N" ~ latitude_text10;
	}else{
		latitude_text10 = "S" ~ latitude_text10;
	}
	var longitude = getprop("/instrumentation/garmin196/menu_points/longitude");
	var longitude_tab = split(".",sprintf("%3.2f",math.abs(longitude)));
	var longitude_text10 = longitude_tab[0];
	var longitude_text1 = "00";
	if(size(longitude_tab)>1){
		longitude_text1 = sprintf("%0.2s",longitude_tab[1]);
	}
	if(longitude>=0){
		longitude_text10 = "E" ~ longitude_text10;
	}else{
		longitude_text10 = "W" ~ longitude_text10;
	}

	setprop("/instrumentation/garmin196/menu_points/latitude10_text",latitude_text10);
	setprop("/instrumentation/garmin196/menu_points/latitude1_text",latitude_text1);
	setprop("/instrumentation/garmin196/menu_points/longitude10_text",longitude_text10);
	setprop("/instrumentation/garmin196/menu_points/longitude1_text",longitude_text1);
}

var init_menu_routes_list = func{
	var routes = props.globals.getNode("/instrumentation/garmin196/routes",1);
	var i = 0;
	foreach (var e; routes.getChildren("route")) {
		setprop("/instrumentation/garmin196/menu_routes/route["~i~"]/texte",e.getChild("name").getValue());
		i=i+1;
	}
	
	for(var j=i;j<11;j=j+1){
		setprop("/instrumentation/garmin196/menu_routes/route["~j~"]/texte","");
	}
	
	if(i<11){
		setprop("/instrumentation/garmin196/menu_routes/route["~i~"]/texte","ENTER TO ADD ROUTE");
	}else{
		i=10;
	}
	setprop("/instrumentation/garmin196/menu_routes/max_no_ligne",i);
}

var init_new_route = func(no_ligne){
	setprop("/instrumentation/gps/scratch/max-results", 1);
	setprop("/instrumentation/gps/scratch/longitude-deg",-9999);
	setprop("/instrumentation/gps/scratch/latitude-deg",-9999);
	setprop("/instrumentation/gps/scratch/type", "airport");
	setprop("/instrumentation/gps/command", "nearest");
	var id = getprop("/instrumentation/gps/scratch/ident");
	
	props.globals.getNode("/instrumentation/garmin196/routes/route["~no_ligne~"]/name",1).setValue(id~" to "~id);
	props.globals.getNode("/instrumentation/garmin196/routes/route["~no_ligne~"]/wpts/wpt[0]/id",1).setValue(id);
	props.globals.getNode("/instrumentation/garmin196/routes/route["~no_ligne~"]/wpts/wpt[0]/type",1).setValue("airport");
}

var update_menu_routes_detail = func{
	var no_ligne = getprop("/instrumentation/garmin196/menu_routes/no_ligne_selected");
	
	var points = props.globals.getNode("/instrumentation/garmin196/routes/route["~no_ligne~"]/wpts/",1);
	var i = 0;
	var last_longitude = 0;
	var last_latitude = 0;
	
	var distance_total = 0;
	var cruise_speed = getprop("/instrumentation/garmin196/cruise-speed");
	var conso_horaire = getprop("/instrumentation/garmin196/fuel-flow");
			
	foreach (var e; points.getChildren("wpt")) {
		var id = e.getChild("id").getValue();
		var type = e.getChild("type").getValue();
		var ligne = id;
		if(substr(id,size(id)-6)=="WPTUSR"){
			ligne = substr(id,0,size(id)-6);
		}elsif(substr(id,size(id)-6)=="WPTTWN"){
			ligne = substr(id,0,size(id)-8);
		}
		ligne = substr(ligne,0,8);
		
		if(i==0){
			setprop("/instrumentation/gps/scratch/max-results", 1);
			setprop("/instrumentation/gps/scratch/exact", 0);
			setprop("/instrumentation/gps/scratch/query", id);
			setprop("/instrumentation/gps/scratch/type", type);
			setprop("/instrumentation/gps/command", "search");
			last_longitude = getprop("/instrumentation/gps/scratch/longitude-deg");
			last_latitude = getprop("/instrumentation/gps/scratch/latitude-deg");
		}else{
			var ligne_spaces = "                              ";
			ligne_spaces = substr(ligne_spaces,0,8-size(ligne));
			var coord_last_id = geo.Coord.new().set_latlon(last_latitude,last_longitude);
			setprop("/instrumentation/gps/scratch/max-results", 1);
			setprop("/instrumentation/gps/scratch/exact", 0);
			setprop("/instrumentation/gps/scratch/query", id);
			setprop("/instrumentation/gps/scratch/type", type);
			setprop("/instrumentation/gps/command", "search");
			last_longitude = getprop("/instrumentation/gps/scratch/longitude-deg");
			last_latitude = getprop("/instrumentation/gps/scratch/latitude-deg");
			
			var coord_id = geo.Coord.new().set_latlon(last_latitude,last_longitude);
			var distance = coord_last_id.distance_to(coord_id) * 0.000539;
			var bearing = coord_last_id.course_to(coord_id);
			
			var ete = distance / cruise_speed;
			var ete_hours = int(ete);
			var ete_minutes = int(ete*60-ete_hours*60);
			var conso = ete * conso_horaire;
			distance_total = distance_total + distance;
			if(getprop("/instrumentation/garmin196/params/units/distance")==1){
				ligne = ligne ~ ligne_spaces ~ sprintf(" %03.0f %03.1f %02.0f:%02.0f %02.1f",bearing,distance,ete_hours,ete_minutes,conso);
			}else{
				ligne = ligne ~ ligne_spaces ~ sprintf(" %03.0f %03.1f %02.0f:%02.0f %02.1f",bearing,(distance*1.852),ete_hours,ete_minutes,conso);
			}
		}
		setprop("/instrumentation/garmin196/menu_routes/point["~i~"]/texte",ligne);
		i=i+1;
	}
	
	var ete_total = distance_total / cruise_speed;
	var ete_total_hours = int(ete_total);
	var ete_total_minutes = int(ete_total*60-ete_total_hours*60);
	var conso_total = ete_total * conso_horaire;
	if(getprop("/instrumentation/garmin196/params/units/distance")==1){
		setprop("/instrumentation/garmin196/menu_routes/total/texte",sprintf("%03.1f %02.0f:%02.0f %02.1f",distance_total,ete_total_hours,ete_total_minutes,conso_total));
	}else{
		setprop("/instrumentation/garmin196/menu_routes/total/texte",sprintf("%03.1f %02.0f:%02.0f %02.1f",(distance_total*1.852),ete_total_hours,ete_total_minutes,conso_total));
	}
	
	for(var j=i;j<10;j=j+1){
		setprop("/instrumentation/garmin196/menu_routes/point["~j~"]/texte","");
	}
	if(i<10){
		setprop("/instrumentation/garmin196/menu_routes/point["~i~"]/texte","ENTER TO ADD WAYPOINT");
	}else{
		i=9;
	}
	setprop("/instrumentation/garmin196/menu_routes/max_no_ligne_detail",i);
}

var init_search_route = func(start_string){
	if(substr(start_string,size(start_string)-6)=="WPTUSR"){
		start_string = substr(start_string,0,size(start_string)-6);
	}elsif(substr(start_string,size(start_string)-6)=="WPTTWN"){
		start_string = substr(start_string,0,size(start_string)-8);
	}
	setprop("/instrumentation/garmin196/menu_routes/search/ligne_select",start_string);
	setprop("/instrumentation/garmin196/menu_routes/search/x_char",size(start_string)-1);
	setprop("/instrumentation/garmin196/menu_routes/search/y_char",searchLastChar(getprop("/instrumentation/garmin196/menu_routes/search/ligne_select"),getprop("/instrumentation/garmin196/menu_routes/search/x_char")));
					
	display_route_waypoint_search();
}

var display_route_waypoint_search = func{
	var ligne_selected = getprop("/instrumentation/garmin196/menu_routes/search/ligne_select");
	var x_char = props.globals.getNode("/instrumentation/garmin196/menu_routes/search/x_char").getValue();
	ligne_selected = substr(ligne_selected,0,x_char);
	ligne_selected = ligne_selected ~ tab_chiffres_lettres[getprop("/instrumentation/garmin196/menu_routes/search/y_char")];
	setprop("/instrumentation/garmin196/menu_routes/search/ligne_select",ligne_selected);

	var plots = [];
	##recherche gps globale
	props.globals.getNode("/instrumentation/gps/scratch/max-results", 1).setIntValue(5);
	props.globals.getNode("/instrumentation/gps/scratch/longitude-deg", 1).setDoubleValue(-9999);
	props.globals.getNode("/instrumentation/gps/scratch/latitude-deg", 1).setDoubleValue(-9999);
	props.globals.getNode("/instrumentation/gps/scratch/exact", 1).setBoolValue(0);
	props.globals.getNode("/instrumentation/gps/scratch/query",1).setValue(ligne_selected);
	props.globals.getNode("/instrumentation/gps/scratch/type",1).setValue("");
	
	setprop("/instrumentation/gps/command", "search");
	var i=0;
	var flag_continue = getprop("/instrumentation/gps/scratch/valid");
	while (flag_continue and i<5) {
		var id = getprop("/instrumentation/gps/scratch/ident");
		var range = getprop("/instrumentation/gps/scratch/distance-nm");
		var bearing = getprop("/instrumentation/gps/scratch/mag-bearing-deg");
		var type = getprop("/instrumentation/gps/scratch/type");
		
		var ligne = id;
		if(type=="waypoint"){
			type = "wpt";
			var type_wpt = substr(id,size(id)-6);
			if(type_wpt=="WPTTWN"){#cities
				ligne = substr(id,0,size(id)-8);
			}elsif(type_wpt=="WPTUSR"){#wpt user
				ligne = substr(id,0,size(id)-6);
			}
		}
		
		ligne = ligne ~ " " ~ type;
		var ligne_spaces = "                              ";
		ligne_spaces = substr(ligne_spaces,0,16-size(ligne));
		
		ligne = ligne ~ ligne_spaces ~ sprintf(" %03.f",bearing);
		if(getprop("/instrumentation/garmin196/params/units/distance")==1){
			ligne = ligne ~sprintf("  %3.1fnm",range);
		}else{
			ligne = ligne ~sprintf("  %3.1fkm",range*1.852);
		}
		var popup_status = getprop("/instrumentation/garmin196/popup_status");
		
		
		var plot = { id: id,texte: ligne,type: type};
		append(plots,plot);
		
		i=i+1;
		setprop("/instrumentation/gps/command", "next");
		flag_continue = getprop("/instrumentation/gps/scratch/has-next");
	}
	
	##recherche gps fix
	props.globals.getNode("/instrumentation/gps/scratch/max-results", 1).setIntValue(5);
	props.globals.getNode("/instrumentation/gps/scratch/longitude-deg", 1).setDoubleValue(-9999);
	props.globals.getNode("/instrumentation/gps/scratch/latitude-deg", 1).setDoubleValue(-9999);
	props.globals.getNode("/instrumentation/gps/scratch/exact", 1).setBoolValue(0);
	props.globals.getNode("/instrumentation/gps/scratch/query",1).setValue(ligne_selected);
	props.globals.getNode("/instrumentation/gps/scratch/type",1).setValue("fix");
	
	setprop("/instrumentation/gps/command", "search");
	i=0;
	flag_continue = getprop("/instrumentation/gps/scratch/valid");
	while (flag_continue and i<5) {
		var id = getprop("/instrumentation/gps/scratch/ident");
		var range = getprop("/instrumentation/gps/scratch/distance-nm");
		var bearing = getprop("/instrumentation/gps/scratch/mag-bearing-deg");
		var type = getprop("/instrumentation/gps/scratch/type");
		
		var ligne = id ~ " " ~ type;
		var ligne_spaces = "                              ";
		ligne_spaces = substr(ligne_spaces,0,16-size(ligne));
		
		ligne = ligne ~ ligne_spaces ~ sprintf(" %03.f",bearing);
		if(getprop("/instrumentation/garmin196/params/units/distance")==1){
			ligne = ligne ~sprintf("  %3.1fnm",range);
		}else{
			ligne = ligne ~sprintf("  %3.1fkm",range*1.852);
		}
		var popup_status = getprop("/instrumentation/garmin196/popup_status");
		
		
		var plot = { id: id,texte: ligne,type: type};
		append(plots,plot);
		
		i=i+1;
		setprop("/instrumentation/gps/command", "next");
		flag_continue = getprop("/instrumentation/gps/scratch/has-next");
	}
	
	##recherche gps vor
	props.globals.getNode("/instrumentation/gps/scratch/max-results", 1).setIntValue(5);
	props.globals.getNode("/instrumentation/gps/scratch/longitude-deg", 1).setDoubleValue(-9999);
	props.globals.getNode("/instrumentation/gps/scratch/latitude-deg", 1).setDoubleValue(-9999);
	props.globals.getNode("/instrumentation/gps/scratch/exact", 1).setBoolValue(0);
	props.globals.getNode("/instrumentation/gps/scratch/query",1).setValue(ligne_selected);
	props.globals.getNode("/instrumentation/gps/scratch/type",1).setValue("vor");
	
	setprop("/instrumentation/gps/command", "search");
	i=0;
	flag_continue = getprop("/instrumentation/gps/scratch/valid");
	while (flag_continue and i<5) {
		var id = getprop("/instrumentation/gps/scratch/ident");
		var range = getprop("/instrumentation/gps/scratch/distance-nm");
		var bearing = getprop("/instrumentation/gps/scratch/mag-bearing-deg");
		var type = getprop("/instrumentation/gps/scratch/type");
		
		var ligne = id ~ " vor";
		var ligne_spaces = "                              ";
		ligne_spaces = substr(ligne_spaces,0,16-size(ligne));
		
		ligne = ligne ~ ligne_spaces ~ sprintf(" %03.f",bearing);
		if(getprop("/instrumentation/garmin196/params/units/distance")==1){
			ligne = ligne ~sprintf("  %3.1fnm",range);
		}else{
			ligne = ligne ~sprintf("  %3.1fkm",range*1.852);
		}
		var popup_status = getprop("/instrumentation/garmin196/popup_status");
		
		
		var plot = { id: id,texte: ligne,type: type};
		append(plots,plot);
		
		i=i+1;
		setprop("/instrumentation/gps/command", "next");
		flag_continue = getprop("/instrumentation/gps/scratch/has-next");
	}
	
	##recherche gps ndb
	props.globals.getNode("/instrumentation/gps/scratch/max-results", 1).setIntValue(5);
	props.globals.getNode("/instrumentation/gps/scratch/longitude-deg", 1).setDoubleValue(-9999);
	props.globals.getNode("/instrumentation/gps/scratch/latitude-deg", 1).setDoubleValue(-9999);
	props.globals.getNode("/instrumentation/gps/scratch/exact", 1).setBoolValue(0);
	props.globals.getNode("/instrumentation/gps/scratch/query",1).setValue(ligne_selected);
	props.globals.getNode("/instrumentation/gps/scratch/type",1).setValue("ndb");
	
	setprop("/instrumentation/gps/command", "search");
	i=0;
	flag_continue = getprop("/instrumentation/gps/scratch/valid");
	while (flag_continue and i<5) {
		var id = getprop("/instrumentation/gps/scratch/ident");
		var range = getprop("/instrumentation/gps/scratch/distance-nm");
		var bearing = getprop("/instrumentation/gps/scratch/mag-bearing-deg");
		var type = getprop("/instrumentation/gps/scratch/type");
		
		var ligne = id ~ " ndb";
		var ligne_spaces = "                              ";
		ligne_spaces = substr(ligne_spaces,0,16-size(ligne));
		
		ligne = ligne ~ ligne_spaces ~ sprintf(" %03.f",bearing);
		if(getprop("/instrumentation/garmin196/params/units/distance")==1){
			ligne = ligne ~sprintf("  %3.1fnm",range);
		}else{
			ligne = ligne ~sprintf("  %3.1fkm",range*1.852);
		}
		var popup_status = getprop("/instrumentation/garmin196/popup_status");
		
		
		var plot = { id: id,texte: ligne,type: type};
		append(plots,plot);
		
		i=i+1;
		setprop("/instrumentation/gps/command", "next");
		flag_continue = getprop("/instrumentation/gps/scratch/has-next");
	}
		
	var plots_sorted = sort (plots, func (a,b) cmp (a.id, b.id));
	var nb_plots = size(plots_sorted);
	if(nb_plots>9){
		nb_plots = 9;
	}
	for(var j=0;j<nb_plots;j=j+1){
		setprop("/instrumentation/garmin196/menu_routes/search/ligne["~j~"]/texte",plots_sorted[j].texte);
		setprop("/instrumentation/garmin196/menu_routes/search/ligne["~j~"]/id",plots_sorted[j].id);
		setprop("/instrumentation/garmin196/menu_routes/search/ligne["~j~"]/type",plots_sorted[j].type);
	}

	for(var j=nb_plots;j<9;j=j+1){
		setprop("/instrumentation/garmin196/menu_routes/search/ligne["~j~"]/texte","");
		setprop("/instrumentation/garmin196/menu_routes/search/ligne["~j~"]/id","");
		setprop("/instrumentation/garmin196/menu_routes/search/ligne["~j~"]/type","");
	}
	setprop("/instrumentation/garmin196/menu_routes/search/no_ligne_selected",-1);
	setprop("/instrumentation/garmin196/menu_routes/search/max_ligne_selected",nb_plots-1);
}

var delete_route = func(no_ligne){
	for(var i=no_ligne+1;i<11;i=i+1){
		if(getprop("/instrumentation/garmin196/routes/route["~i~"]/name")!=nil){
			setprop("/instrumentation/garmin196/routes/route["~(i-1)~"]/name",getprop("/instrumentation/garmin196/routes/route["~i~"]/name"));
			for(var j=0;j<10;j=j+1){
				if(getprop("/instrumentation/garmin196/routes/route["~i~"]/wpts/wpt["~j~"]/id")!=nil){
					setprop("/instrumentation/garmin196/routes/route["~(i-1)~"]/wpts/wpt["~j~"]/id",getprop("/instrumentation/garmin196/routes/route["~i~"]/wpts/wpt["~j~"]/id"));
					setprop("/instrumentation/garmin196/routes/route["~(i-1)~"]/wpts/wpt["~j~"]/type",getprop("/instrumentation/garmin196/routes/route["~i~"]/wpts/wpt["~j~"]/type"));
				}
			}
		}
	}
	var nb_routes = size(props.globals.getNode("/instrumentation/garmin196/routes",1).getChildren("route"));
	if(getprop("/instrumentation/garmin196/routes/route["~no_ligne~"]/name")!=nil){
		props.globals.getNode("/instrumentation/garmin196/routes/route["~(nb_routes-1)~"]").remove();
	}
	
	save_parameters();
}

var delete_route_detail = func(no_ligne_liste,no_ligne_detail){
	if(no_ligne_detail>0){
		for(var i=no_ligne_detail+1;i<10;i=i+1){
			if(getprop("/instrumentation/garmin196/routes/route["~no_ligne_liste~"]/wpts/wpt["~i~"]/id")!=nil){
				setprop("/instrumentation/garmin196/routes/route["~no_ligne_liste~"]/wpts/wpt["~(i-1)~"]/id",getprop("/instrumentation/garmin196/routes/route["~no_ligne_liste~"]/wpts/wpt["~i~"]/id"));
				setprop("/instrumentation/garmin196/routes/route["~no_ligne_liste~"]/wpts/wpt["~(i-1)~"]/type",getprop("/instrumentation/garmin196/routes/route["~no_ligne_liste~"]/wpts/wpt["~i~"]/type"));
			}
		}

		var nb_waypoints = size(props.globals.getNode("/instrumentation/garmin196/routes/route["~no_ligne_liste~"]/wpts",1).getChildren("wpt"));
		if(getprop("/instrumentation/garmin196/routes/route["~no_ligne_liste~"]/wpts/wpt["~no_ligne_detail~"]/id")!=nil){
			props.globals.getNode("/instrumentation/garmin196/routes/route["~no_ligne_liste~"]/wpts/wpt["~(nb_waypoints-1)~"]").remove();
		}
		save_parameters();
	}
}

var validate_menu_search_routes = func{
	var no_ligne = getprop("/instrumentation/garmin196/menu_routes/search/no_ligne_selected");
	var id = getprop("/instrumentation/garmin196/menu_routes/search/ligne["~no_ligne~"]/id");
	var type = getprop("/instrumentation/garmin196/menu_routes/search/ligne["~no_ligne~"]/type");
	var no_ligne_liste = getprop("/instrumentation/garmin196/menu_routes/no_ligne_selected");
	var no_ligne_detail = getprop("/instrumentation/garmin196/menu_routes/no_ligne_detail");
	setprop("/instrumentation/garmin196/routes/route["~no_ligne_liste~"]/wpts/wpt["~no_ligne_detail~"]/id",id);
	setprop("/instrumentation/garmin196/routes/route["~no_ligne_liste~"]/wpts/wpt["~no_ligne_detail~"]/type",type);
	
	var name_wpt0 = getprop("/instrumentation/garmin196/routes/route["~no_ligne_liste~"]/wpts/wpt[0]/id");
	if(substr(name_wpt0,size(name_wpt0)-6)=="WPTUSR"){
		name_wpt0 = substr(name_wpt0,0,size(name_wpt0)-6);
	}elsif(substr(name_wpt0,size(name_wpt0)-6)=="WPTTWN"){
		name_wpt0 = substr(name_wpt0,0,size(name_wpt0)-8);
	}
	var name_wpt1 = name_wpt0;
	var nb_points = size(props.globals.getNode("/instrumentation/garmin196/routes/route["~no_ligne_liste~"]/wpts").getChildren("wpt"));
	if(nb_points>1){
		name_wpt1 = getprop("/instrumentation/garmin196/routes/route["~no_ligne_liste~"]/wpts/wpt["~(nb_points-1)~"]/id");
		if(substr(name_wpt1,size(name_wpt1)-6)=="WPTUSR"){
			name_wpt1 = substr(name_wpt1,0,size(name_wpt1)-6);
		}elsif(substr(name_wpt1,size(name_wpt1)-6)=="WPTTWN"){
			name_wpt1 = substr(name_wpt1,0,size(name_wpt1)-8);
		}
	}
	
	var name = name_wpt0 ~ " to " ~ name_wpt1;
	setprop("/instrumentation/garmin196/routes/route["~no_ligne_liste~"]/name",name);
}

var load_flight_plan = func(no_ligne){
	setprop("/autopilot/route-manager/input","@CLEAR");
	setprop("/autopilot/route-manager/input","@POP");
	var points = props.globals.getNode("/instrumentation/garmin196/routes/route["~no_ligne~"]/wpts/",1);
	foreach (var e; points.getChildren("wpt")) {
		var id = e.getChild("id").getValue();
		setprop("/autopilot/route-manager/input",id);
	}
	setprop("/autopilot/route-manager/input","@JUMP0");
	setprop("/autopilot/route-manager/input","@ACTIVATE");
}

var close_fpl_loaded = func{
	setprop("/instrumentation/garmin196/menu_routes/fpl-loaded",0);
}
var affiche_fpl_loaded = func{
	setprop("/instrumentation/garmin196/menu_routes/fpl-loaded",1);
	settimer(close_fpl_loaded,3);
}

var close_waypoint_jump = func{
	setprop("/instrumentation/garmin196/menu_routes/waypoint-jump",0);
}
var affiche_waypoint_jump = func{
	setprop("/instrumentation/garmin196/menu_routes/waypoint-jump",1);
	settimer(close_waypoint_jump,3);
}

var jump_to_waypoint = func(no_ligne){
	var no_ligne_liste = getprop("/instrumentation/garmin196/menu_routes/no_ligne_selected");
	load_flight_plan(no_ligne_liste);
	setprop("/autopilot/route-manager/input","@JUMP"~no_ligne);
}