var file_php="../3d/ajax/ajax3d.php";
var modulo_alti=0;

var Platef=new Array("");

var objet_3d=new Array;
var update_on=false;
var init_3d_ok=true; 
var placemark=null;
var model=null;
var alti_sol=0;



google.load("earth", "1");
//google.load("maps", "2.99");  //geocodage



var platef_view=0;
var ge = null;

var vehicule={
		auto:true,
	  	timer_auto:-1
};

var message_speed="";
var idx_lat=0;
var cap1=180;
var roll=0;


var href=window.location.href.substr(0,(window.location.href.lastIndexOf("/")))+"/";

var k_speed=8;
var speed=0;
var dist_min_arrive=0.003;
var dist_min_approche=0.001;

//Pour tester tour sur un site
var cap_precedent=0;
var cap_cumule=0;

var cap_clear=0;


//Temps reel update
var t_last_modif=0;


/* Initialisation */
/******************/
function init() {

		mode_auto(true);
		google.earth.createInstance("map3d", initCallback, failureCallback);
		
		init_site(); // Liste des sites
		
		b_speed(1); // Affichage speed 
 		
		setTimeout('document.getElementById("keyboard").style.display="none";',5000);
				
}
// Init GE
function initCallback(object) {
	  ge = object;
	  ge.getWindow().setVisibility(true);
	  ge.getLayerRoot().enableLayerById(ge.LAYER_BUILDINGS, true);
	  
	init_liste_objet_3d()  
	init_suite();
	
	Plateform_view();  	
 	  
			  
	//Evenement pour la synchro balayage image et déplacement objets. C'est ici que l'on place les objets
			window.google.earth.addEventListener(ge, 'frameend', function() { 		
				origine="event";
				mise_jour_position ();
				});
		place_pres_WP();	
		if (site!="") {
					setTimeout("update_map();info_wp();",1000);  // on donne tempas arrivé info fonds
			} else {
					setTimeout("validation_lieu();calcul_position();update_position();update_map();info_wp();",2000);  // on donne tempas arrivé info fonds
		}
		calcul_position();
		update_position();
		init_instruments();
		timer_manu();
		place();  // Icone lieux
																	
}
function mise_jour_position () {
				var date_t=new Date();
				var le_temps=date_t.getTime();
				var t0=le_temps-t_last_modif;
				if (update_on && t0>50) {
					
					t_last_modif=le_temps;
					calcul_position();
					update_position() ;
				}
	
}
function update_position() {
	
							
							var i=0;
							var la_date=new Date();
							var roll_cpt=(la_date.getTime())%360;
							var roll_hel=(-la_date.getTime()/5)%360;
										for (i=0;i<Platef.length;i++) { //Platef.length
										
												//Positionnement	à chaque fin d'image écran									
												Platef[i].loc.setLatitude(Platef[i].lat);
												Platef[i].loc.setLongitude(Platef[i].lng);
												if (i>0 && i<5 && update_on==false)	Platef[i].la_place.setVisibility(false); // Pas de vague !
					
												Platef[i].loc.setAltitude(Platef[i].alti +objet_3d[Platef[i].num_objet].alti_s0);  // Altitude par rapport mer + correction modele 
												Platef[i].orient.setHeading((Platef[i].heading+objet_3d[Platef[i].num_objet].cap0)%360);	// Correction Offset Model
												 
												if ((Platef[i].alti_sol>1 && (Platef[i].alti>1 || Platef[i].alti<-4 )) || i==5) {  // Ca vole ou plonge ou c'est l'helice du s/marin
												
														var roll=Platef[i].d_cap;
														if( objet_3d[Platef[i].num_objet].type==3) roll=0; // S/Marin
														
														// Reduire sensibilité au roll
														roll=roll*4 / k_speed;  
														roll=Math.max(roll,-40);var dh=Math.min(roll,+40);
														if (i==5) dh= roll_hel; // rotation helice
														var dhm=(360-dh)%360;
														Platef[i].roll=dh;
														var tilt=Platef[i].tilt*2;
														
														
														
														var tiltm=(360-tilt)%360;
														
														switch(objet_3d[Platef[i].num_objet].cap0) {  // Applique la rotation en virage et tilt. Depend offset cap du model.
																case 90:
																		Platef[i].orient.setTilt(dh);  
																		Platef[i].orient.setRoll(tiltm);
																break;
																case 270:
																		Platef[i].orient.setTilt(dhm);  
																		Platef[i].orient.setRoll(tilt);
																break;
																case 180:
																		Platef[i].orient.setRoll(dh); 
																		Platef[i].orient.setTilt(tilt);  
																break;
																case 0:
																		Platef[i].orient.setRoll(dhm);  
																		Platef[i].orient.setTilt(tiltm);  
																break;
														}
														
														
												} else { // C'est au niveau du sol ou de la mer
													if (i==0) {
															Platef[i].orient.setRoll(0);  
															Platef[i].orient.setTilt(0);
															Platef[i].tilt=0;
															roll=0;
													} 
													if (i>0 && i<5){ // Les vagues
																	Platef[i].orient.setRoll(roll_cpt*(i-1.5));  
																	Platef[i].orient.setTilt(0);
															
													}
													
													
												}
											
										}
										
										platef_view=0;
										 Camera(Platef[platef_view].lat,Platef[platef_view].lng,Platef[platef_view].alti,objet_3d[Platef[platef_view].num_objet].range_cam,Platef[platef_view].heading,80);
								
					
}
function init_suite() {
	init_platforme(document.getElementById("liste_objets").value);
	init_animations_3d(); // vagues, hélices etc
 	map_type=G_PHYSICAL_MAP;		
 	init_carte_2d();
	cligno_run_pause();
	// Geocodage
	geocoder = new GClientGeocoder();
	

}




function failureCallback(object) {  // Google earth ne 'installe pas
		init_3d_ok=false;
		document.getElementById("camera").style.visibility='hidden';
		document.getElementById("mes_erreur").style.visibility='visible';
		init_suite();
		
}

function init_animations_3d() {
	

		var i=0; 
		for (i=1;i<=5;i++) { // 1 a 4 les vagues, 5=hélice s/marin
					var lat_ref=0;
					var lng_ref=0;
					var cap_ref=0;
					var loc_ = null;
					var scal_=null   ;
					var orient_=null;
					var placemark_v =null;
					
					if (init_3d_ok) {
							placemark_v = ge.createPlacemark('');
							placemark_v.setName('model');
							model = ge.createModel('');
							ge.getFeatures().appendChild(placemark_v);
							loc_ = ge.createLocation('');
							model.setLocation(loc_);
							scal_=ge.createScale  	( '' )   ;
							model.setScale	(scal_);
							orient_=ge.createOrientation('');
							model.setOrientation(orient_);
							link = ge.createLink('');
							if (i<=4) { 
									link.setHref(href+"images/models/vague.kmz/models/vague.dae"); // Vagues model 3d
							} else {
									link.setHref(href+"images/models/"+objet_3d[idx_helice].model); // héliceS/marin model 3d
							}
							model.setLink(link);
					}
					if (i<=4) {
							Platef[i]=new objet_platform(lat_ref,lng_ref,0,loc_,scal_,orient_,0,placemark_v,idx_vague);
							
					} else {
							Platef[i]=new objet_platform(lat_ref,lng_ref,objet_3d[idx_helice].alti0,loc_,scal_,orient_,0,placemark_v,idx_helice);
					}
				if (init_3d_ok) {
					 model.setAltitudeMode(ge.ALTITUDE_ABSOLUTE);
					if (i<=4) {
						Platef[i].scal.set(0.4 ,10 ,0.4 );
					} else {
						var Scal1=objet_3d[idx_helice].scale0;
						Platef[i].scal.set(Scal1,Scal1,Scal1);
					}
					Platef[i].loc.setLatitude(Platef[i].lat);
					Platef[i].loc.setLongitude(Platef[i].lng);
					Platef[i].loc.setAltitude(Platef[i].alti);
					Platef[i].orient.setHeading((Platef[i].heading+objet_3d[Platef[i].num_objet].cap0)%360);
					placemark_v.setGeometry(model);
					
			
				}
				
		}
	window.focus();
}


function init_platforme(p) { //Initialisation du bateua,avion etc avec l'objet_3d d'indice p
	

		var i=0; //Platef[0]
		var lat_ref=lati[idx_lat];
		var lng_ref=lngi[idx_lat];
		var cap_ref=0;
		var loc_ = null;
		var scal_=null   ;
		var orient_=null;
	
		if (placemark!=null) { // On change d'avion
			if (init_3d_ok) placemark.setVisibility(false);
			lat_ref=Platef[i].lat;
			lng_ref=Platef[i].lng;
			cap_ref=Platef[i].heading;
		}
		
		
		 // Altitude
		
		if (init_3d_ok) {
				placemark = ge.createPlacemark('');
				placemark.setName('model');
				model = ge.createModel('');
				ge.getFeatures().appendChild(placemark);
				loc_ = ge.createLocation('');
				model.setLocation(loc_);
				scal_=ge.createScale  	( '' )   ;
				model.setScale	(scal_);
				orient_=ge.createOrientation('');
				model.setOrientation(orient_);
				link = ge.createLink('');
				
				link.setHref(href+"images/models/"+objet_3d[p].model); // model 3d
				model.setLink(link);
		}
		Platef[i]=new objet_platform(lat_ref,lng_ref,objet_3d[p].alti0,loc_,scal_,orient_,cap_ref,placemark,p);
	if (init_3d_ok) {
		
		 model.setAltitudeMode(ge.ALTITUDE_ABSOLUTE);
		var Scal1=objet_3d[p].scale0;
		
		Platef[i].scal.set(Scal1,Scal1,Scal1);
		Platef[i].loc.setLatitude(Platef[i].lat);
		Platef[i].loc.setLongitude(Platef[i].lng);
		Platef[i].loc.setAltitude(Platef[i].alti);
		Platef[i].orient.setHeading((Platef[i].heading+objet_3d[Platef[i].num_objet].cap0)%360);
		placemark.setGeometry(model);
		

	}
	speed=objet_3d[p].cruise_speed/(60*3600*20);
	
	switch(objet_3d[Platef[i].num_objet].type) {
 									case 0:  // Helico
										dist_min_arrive=0.003;
										document.getElementById("compas").style.visibility='hidden';
										document.getElementById("attitude_").style.visibility='visible';
										document.getElementById("sondeur").style.visibility='hidden';
										document.getElementById("altimetre").style.visibility='visible';
										document.getElementById("sub_depth").style.visibility='hidden';
										document.getElementById("ground_alti").style.visibility='visible';
									break;
									case 1: // avion
										dist_min_arrive=0.003;
										document.getElementById("compas").style.visibility='hidden';
										document.getElementById("attitude_").style.visibility='visible';
										document.getElementById("sondeur").style.visibility='hidden';
										document.getElementById("altimetre").style.visibility='visible';
										document.getElementById("sub_depth").style.visibility='hidden';
										document.getElementById("ground_alti").style.visibility='visible';
									break;
									case 2: // bateau
										
										dist_min_arrive=0.04;
										dist_min_approche=0.02;
										document.getElementById("compas").style.visibility='visible';
										document.getElementById("attitude_").style.visibility='hidden';
										document.getElementById("sondeur").style.visibility='visible';
										document.getElementById("altimetre").style.visibility='hidden';
										document.getElementById("sub_depth").style.visibility='hidden';
										document.getElementById("ground_alti").style.visibility='hidden';
									break;
									case 3: // S/Marin
										
										dist_min_arrive=0.04;
										dist_min_approche=0.02;
										document.getElementById("compas").style.visibility='visible';
										document.getElementById("attitude_").style.visibility='hidden';
										document.getElementById("sondeur").style.visibility='visible';
										document.getElementById("altimetre").style.visibility='hidden';
										document.getElementById("sub_depth").style.visibility='visible';
										document.getElementById("ground_alti").style.visibility='hidden';
									break;
									
								}


	window.focus();
}



function objet_platform(une_latitude,une_longitude,une_alti,une_location,une_scale,une_orient,u_heading,la_place_,num_objet_) {
      this.lat=une_latitude;
      this.lng=une_longitude;
	  this.alti=une_alti;
	  this.alti0=une_alti;

	  this.alti_sol=une_alti;

	  this.loc=une_location;
	  this.scal=une_scale;
	  this.orient=une_orient;
	  this.tilt=0;
	  this.heading=u_heading;
	  this.roll=0;
	  this.d_cap=0;
	  this.la_place=la_place_;
	  this.num_objet=num_objet_;
 }

function validation_lieu() { // Pour eviter bateau à terre lors d'un changement de lieu
	var pied_pilote=-10;
//	if (objet_3d[Platef[0].num_objet].type==3) pied_pilote=-150;
	alti_sol= ge.getGlobe().getGroundAltitude(Platef[0].lat,Platef[0].lng); // Altitude du sol <0 en mer
	if (objet_3d[Platef[0].num_objet].type>=2 && alti_sol>pied_pilote) { // Bateau ou S/Marin et pas assez de fond
			lat_ref=Platef[0].lat;
			lng_ref=Platef[0].lng;
			for (var i=0;i<1000;i++) {
				Platef[0].lat=lat_ref+i*Math.cos(i)/20; // on cherche autour
				Platef[0].lng=lng_ref+i*Math.sin(i)/20;
				if (ge.getGlobe().getGroundAltitude(Platef[0].lat,Platef[0].lng)<pied_pilote) {
					lat_ref=Platef[0].lat;
					lng_ref=Platef[0].lng;
					i=1000;
				}
			}
	}
}


function calcul_position() {
	var nb=Platef.length;
	
	var i=0;
							
							// Cap à prendre
							var dlat=lati[idx_lat]-Platef[i].lat;
							var dlng=lngi[idx_lat]-Platef[i].lng;
			
						if (dlat==0) dlat=0.0000000001;
						var heading_c=Math.atan(dlng*Math.cos(3.14159*Platef[i].lat/180)/dlat);  // Cap 
						heading_c=heading_c*180/Math.PI;
						if (dlat<0) {
								heading_c=heading_c+180;
						}
						
						
						//Cap consigne
						heading_c=(heading_c+360)%360;  // 
						
						var dh=heading_c-Platef[i].heading;
						if (dh>180 ) dh=dh-360;
						if (dh<-180 ) dh=dh+360; // Ecart en cap
						
						modulo_alti=(1+modulo_alti)%10; // Pour reduire la recherche remontée de fonds
						if (objet_3d[Platef[i].num_objet].type>=2 && init_3d_ok && modulo_alti==0) {  // Bateau ou S/Marin
										
											var babord=0;
											var tribord=0;
											var ab=0;var at=0; var minalti=1000000;var dha=0;
											for (var delta=160;delta>5;delta=delta-20) {
												ab=altimetre(Platef[i].heading-delta);
												
												if (ab>-10) babord=Math.max(200-delta,babord);
												if (ab<minalti) {
													minalti=ab;
													dha=-delta;
												}
												
												at=altimetre(Platef[i].heading+delta);
												
												if (at>-10) tribord=Math.max(200-delta,tribord);
												if (at<minalti) {
													minalti=at;
													dha=+delta;
												}
											}
											if ((Math.abs(babord)+Math.abs(tribord))>0) {
													dh=(babord-tribord)/10;
													if (dh==0) dh=dha; //axe avec l'alti minimum
													cap_clear=100;
											} else {
															cap_clear--;
															cap_clear=Math.max(cap_clear,0);	
															if (cap_clear>0) dh=0; // On maintien le cap
												
											}
											if ( Math.abs(cap_cumule)>720) WP_suivant(); //on tourne en rond
							
						} else {
							
						}
						if (vehicule.auto==false) { // Manuel
							dh=0;
							}
							var sensi=1;
							if (objet_3d[Platef[i].num_objet].type==0 && k_speed<3) sensi=5; //helico plus nerveu en virage
							if (leftButtonDown ) dh=Math.max(-8*sensi*k_speed,-120);  //Eviter rotation trop rapide
							if (rightButtonDown ) dh=Math.min(8*sensi*k_speed,+120);
	
						// Pour eviter oscillation en fin de 1/2 tour
						if (dh>0) { 
							if(dh<Platef[i].d_cap ) {
								Platef[i].d_cap=Math.min(dh,Platef[i].d_cap); 
							} 
						} 
						if (dh<0) {
							if(dh>Platef[i].d_cap ) {
								Platef[i].d_cap=Math.max(dh,Platef[i].d_cap); 
							}
						}
						
						Platef[i].d_cap= dh*0.1+ 0.9*Platef[i].d_cap ; // RC sur la derivee du cap
						
						Platef[i].heading  = Platef[i].heading + Platef[i].d_cap/10;
						
						Platef[i].heading=Platef[i].heading%360;
						//gId("disp").innerHTML=Math.floor(Platef[i].heading)+"*"+Math.floor(dh);
						heading_c=Platef[i].heading*Math.PI/180
						Platef[i].lat+=k_speed*speed*Math.cos(heading_c);
						Platef[i].lng+=k_speed*speed*Math.sin(heading_c);
						
						//Suivi si rotation sur place
						var dcap=Math.abs(Platef[i].heading-cap_precedent);
						if (dcap>180) dcap=-dcap;
						cap_cumule+=(360+dcap)%360;
						cap_precedent=Platef[i].heading;
									
									
						
						
								//TEST ARRIVE a destination
								var k_arriv=9;
								if (objet_3d[Platef[i].num_objet].type==2) k_arriv=200; // bateau
							if ((Math.abs(dlat)+Math.abs(dlng)) <Math.max(k_arriv*k_speed*speed,dist_min_arrive) ) { // on est pratiquement arrivé
									WP_suivant();
							}
						
	
			// lissage altitude
					if (init_3d_ok) {
								alti_sol= ge.getGlobe().getGroundAltitude(Platef[i].lat,Platef[i].lng); // Altitude du sol <0 en mer
								if (objet_3d[Platef[i].num_objet].type>=2 && alti_sol>-9 ) {mode_auto(true);}  // on repasse en auto pour ne pas s'echouer
								if (objet_3d[Platef[i].num_objet].type<2) alti_sol=Math.max(alti_sol,0) ; //pas de sol <0 sauf pour bateau et S/Marin
								var alti_avion_old=Platef[i].alti; // Alti par rapport à mer
								
								if (objet_3d[Platef[i].num_objet].type!=3) { // Pas un S/Marin
										if (hautButtonDown ) Platef[i].alti0=+1+Platef[i].alti0*1.05;
										if (basButtonDown ) Platef[i].alti0=-1+Platef[i].alti0*0.95;
										Platef[i].alti0=Math.max(Platef[i].alti0,objet_3d[Platef[i].num_objet].alt_min);
										Platef[i].alti0=Math.min(Platef[i].alti0,objet_3d[Platef[i].num_objet].alt_max);
										var alti_avion=Platef[i].alti0+alti_sol;
										Platef[i].alti=alti_avion*0.2+0.8*Platef[i].alti;
										var delta_sol=Platef[i].alti-alti_sol;
										if (delta_sol <0.5 *Platef[i].alti0) Platef[i].alti+=0.1*Platef[i].alti0;  // Pour remonter si on va toucher le fond
										if (delta_sol <0.1 *Platef[i].alti0) Platef[i].alti+=0.1*Platef[i].alti0;
								} else {
										if (hautButtonDown ) Platef[i].alti0=+1+Platef[i].alti0*0.95;
										if (basButtonDown ) Platef[i].alti0=-1+Platef[i].alti0*1.05;
										Platef[i].alti0=Math.max(Platef[i].alti0,objet_3d[Platef[i].num_objet].alt_min);
										Platef[i].alti0=Math.min(Platef[i].alti0,objet_3d[Platef[i].num_objet].alt_max);
										var garde=Math.min(0.9*alti_sol,alti_sol+20); // Garde pas toucher fond
										Platef[i].alti0=Math.max(Platef[i].alti0,garde); 
										var alti_avion=Platef[i].alti0;  // S/Marin entre 0 et -500m;
										Platef[i].alti=alti_avion*0.2+0.8*Platef[i].alti;
										var delta_sol=Platef[i].alti-alti_sol;
										if (delta_sol <15) { Platef[i].alti0+=5;} // Pour remonter si on va toucher le fond
										if (delta_sol <10 ) {Platef[i].alti+=5; Platef[i].alti0=Platef[i].alti;}
								}
								
								
								Platef[i].alti=Math.max(Platef[i].alti,alti_sol);  // on peut pas rentrer dan le sol ou fond mer
								Platef[i].alti_sol=Platef[i].alti-alti_sol; // altitude par rapport au sol sur terre ou fond mer
								Platef[5].la_place.setVisibility(false); //helice masque
								switch(objet_3d[Platef[i].num_objet].type) {
 									case 0:  // Helico
										Platef[i].tilt=0;
										
									break;
									case 1: // avion
											var tilt=0.1*(Platef[i].alti-alti_avion_old)+0.9*Platef[i].tilt;
											tilt=Math.max(tilt,-20);Platef[i].tilt=Math.min(tilt,+20);
											
									break;
									case 2: // bateau
										Platef[i].tilt=0;
										Platef[i].alti_sol=0;
										Platef[i].alti=0;
										
									break;
									
									
									
									
									case 3: // Sous-Marin
										Platef[i].alti=Math.min(-3,Platef[i].alti);
										var tilt=0.1*(Platef[i].alti-alti_avion_old)+0.9*Platef[i].tilt; // RC sur le tilt
										tilt=Math.max(tilt,-20);Platef[i].tilt=Math.min(tilt,+20);
										
										//on positionne l'helice du scorpene sauf le roll
												var idxs=idx_helice;
												if(Platef[i].num_objet==idx_shark) idxs=idx_helice_shark;
												Platef[5].num_objet=idxs;
												
												var Scal1=objet_3d[Platef[5].num_objet].scale0;
												Platef[5].scal.set(Scal1,Scal1,Scal1);
										
												Platef[5].alti=Platef[i].alti;
												Platef[5].alti_sol=Platef[i].alti_sol
												Platef[5].tilt= Platef[i].tilt;
												Platef[5].lat=Platef[i].lat;
												Platef[5].lng=Platef[i].lng;
												Platef[5].heading=Platef[i].heading;
												Platef[5].d_cap=Platef[i].d_cap;
												Platef[5].la_place.setVisibility(true);
										
									break;
								}
								
								//Positionement des vagues (cap et position)
										for (i=1;i<=4;i++) {
											if (objet_3d[Platef[0].num_objet].type>0 &&Platef[0].alti <1 &&Platef[0].alti >-5 ) { // Vagues pour les avions et le bateau
												Platef[i].heading=Platef[0].heading+(2.5-i)*10;
												Platef[i].lat=Platef[0].lat;
												Platef[i].lng=Platef[0].lng;
												Platef[i].la_place.setVisibility(true);
											} else {
												Platef[i].la_place.setVisibility(false);
											}
											
										}
								
						
					}
	
	
	 
	
 } 
 function WP_suivant() {
 
									 idx_lat++;  // On va changer de WP
									idx_lat=idx_lat%lati.length;
									document.getElementById("sel_site").value=idx_lat;
									cap_cumule=0;
									cap_precedent=Platef[0].heading;
									validation_lieu(); 
									update_map();
}
 
 function altimetre(teta) { //somme des altitudes dans une direction
	 						var capa=teta*Math.PI/180
							var i=0;var lat_=0;var lng_=0;
							var somme=0;
							for (var j=2;j<100;j=j+45) {  // Pas trop de point cela ralenti chrome
								var dist_=Math.max(dist_min_approche,j*k_speed*speed);
							 	lat_=Platef[i].lat+dist_*Math.cos(capa);
							 	lng_=Platef[i].lng+dist_*Math.sin(capa);
							  	somme+=ge.getGlobe().getGroundAltitude(lat_,lng_);  // Altitude 
							}

							return somme;
 }
 
 

/* NAVIGATION */
/**************/
function Plateform_view() {
	
	
	
	var tilt=80;	
	if (update_on) {
		ge.getOptions().setFlyToSpeed(ge.SPEED_TELEPORT);
	} else {
		ge.getOptions().setFlyToSpeed(0.5);
		
	}
	
	platef_view=0;
	Camera(Platef[platef_view].lat,Platef[platef_view].lng,Platef[platef_view].alti,objet_3d[Platef[platef_view].num_objet].range_cam,Platef[platef_view].heading,tilt);
	
}

function force_site(idx) {  // On veut rejoindre un site
	
	var i=0;
	cap_cumule=0;
	cap_precedent=Platef[i].heading;
	if(vehicule.auto){
			 
			idx_lat=idx;
	}else{ //Manual
	
			idx_lat=idx;
			Platef[i].lat=lati[idx_lat] ;
			Platef[i].lng=lngi[idx_lat];
			place_pres_WP();
			Plateform_view();
	}
	document.getElementById("sel_site").value=idx_lat;
	validation_lieu();
	update_map();
}

function place_pres_WP() { // on place objet en avant du WP pour le voir
	var d=2.5*dist_min_arrive; 
	var teta=(190+Platef[0].heading); //leger desaxe
	Platef[0].lat+=d*Math.cos(Math.PI*teta/180);
	Platef[0].lng+=d*Math.sin(Math.PI*teta/180);
}

function create_objet_3d(_nom,_model,_cap0,_alti0,_alti_s0,_scale0,_cruise_speed,range_cam,alt_min,alt_max,_type,base_) {
      this.nom=_nom;
      this.model=_model;
	  this.cap0=_cap0;
	  this.alti0=_alti0;
	  this.alti_s0=_alti_s0; //decalage modele
	  this.scale0=_scale0;
	  this.cruise_speed=_cruise_speed;
	  this.range_cam=range_cam;
	  this.alt_min=alt_min;
	  this.alt_max=alt_max;
	  this.type=_type;  //0=helo,1=avion,2=bateau, 3=S/Marin
	  this.base=base_; //base=true, enfant anime=false;
 }
 //Objet de base. Toutes les constantes de definition
objet_3d[0]=new create_objet_3d("Cesna","Cesna.kmz/models/Cesna.dae",90,90,0,1,80,300,0,5000,1,true);
objet_3d[1]=new create_objet_3d("Breguet Atlantique","breguet.kmz/models/breguet.dae",180,100,0,500,300,120,0,5000,1,true);
objet_3d[2]=new create_objet_3d("Helicopter","helo3.kmz/models/helo3.dae",180,100,0,2,50,300,0,5000,0,true);
objet_3d[3]=new create_objet_3d("Sailing boat","voilier.kmz/models/voilier.dae",270,0,0,1,10,300,-1,1,2,true);
objet_3d[4]=new create_objet_3d("Ketch","Ketch.kmz/models/Ketch.dae",0,0,0,0.003,10,300,-1,1,2,true);

objet_3d[5]=new create_objet_3d("Scorpene submarine","Scorpene_hull.kmz/models/Scorpene_hull.dae",0,-100,2,16,10,300,-400,0,3,true);
var idx_shark=6;
objet_3d[idx_shark]=new create_objet_3d("Shark sub","Shark_sub.kmz/models/Shark_sub.dae",0,-100,3,1,10,120,-11200,0,3,true);
//Objet d'animation
var idx_helice=7;
objet_3d[idx_helice]=new create_objet_3d("Scorpene submarine","Scorpene_shaft.kmz/models/Scorpene_shaft.dae",0,-100,2,16,10,300,-400,0,3,false);
var idx_vague=8;
objet_3d[idx_vague]=new create_objet_3d("Vagues","vague.kmz/models/vague.dae",180,0,0,1,10,300,-1,1,3,false);
var idx_helice_shark=9;
objet_3d[idx_helice_shark]=new create_objet_3d("Helice shark","Scorpene_shaft.kmz/models/Scorpene_shaft.dae",0,-100,3,2,10,300,-11200,0,3,false);



function gId(x) { return document.getElementById(x); }
function place(){
	for (i=0;i<nom_lieu.length;i++) {
			one_place(nom_lieu[i],lati[i],lngi[i]);

	}
}
function one_place(nom,lat,lng) {
	var placemark = ge.createPlacemark('');
			placemark.setName(nom );
			ge.getFeatures().appendChild(placemark);
			
			// Create style map for placemark
			var normal = ge.createIcon('');
			normal.setHref('http://maps.google.com/mapfiles/kml/paddle/red-circle.png');
			var iconNormal = ge.createStyle('');
			iconNormal.getIconStyle().setIcon(normal);
			var highlight = ge.createIcon('');
			highlight.setHref('http://maps.google.com/mapfiles/kml/paddle/red-circle.png');
			var iconHighlight = ge.createStyle('');
			iconHighlight.getIconStyle().setIcon(highlight);
			var styleMap = ge.createStyleMap('');
			styleMap.setNormalStyle(iconNormal);
			styleMap.setHighlightStyle(iconHighlight);
			placemark.setStyleSelector(styleMap);
			  
			// Create point
			var la = ge.getView().copyAsLookAt(ge.ALTITUDE_ABSOLUTE);
			var point = ge.createPoint('');
			point.setLatitude(lat);
			point.setLongitude(lng);
			placemark.setGeometry(point);
}


