function loadgame()
{
	if(isRequest) return false;
	
	$('home_email').hide();

	$('game_maquette').show();
	$('game_goodies').show();
	
	$('home').hide();
	$('main').show();
	
	$('infoPiecesAvion').update('0 '+getLang('pieces_trouvees'));
	$('infoGoodies').update('<a href="#" onclick="show_goodies(); return false;">0 '+getLang('goodies_trouves')+'</a>');

	$('btnMaps').show();
	
	//$('contentNoMap').hide();
	$('map').show();
	initStage(idStage);
	
	howToPlay();
	
	initGame();
	
	$('btn_home').show();
}

function keymove()
{
	if(activatedTouche==37)
	{
		anglePlane = anglePlane -1 * stepPlane;
		goto();
		
	} else if(activatedTouche==39)
	{
		anglePlane = anglePlane + stepPlane;
		goto();
	}
	else if(activatedTouche==38) goto();
}

function initGame()
{
	if(isRequest) return false;
	
	$('contentHTML').hide();
	$('map').show();
	
	map = new GMap2($('googlemap'));
	var type_map = G_HYBRID_MAP;
	//var type_map = G_NORMAL_MAP;
	map.setMapType(type_map);
	
	// désactiver les fonctions non-utiles de la map
	map.disableDragging();
	map.disableDoubleClickZoom();
	map.disableContinuousZoom();
	map.disableGoogleBar();
	map.disableScrollWheelZoom();
	map.setCenter(new GLatLng(lat, long), zoom);
	
	map.addControl(new GOverviewMapControl());
	
	// préchargement des images
	var preload_imgs = '';
	for(var i=0; i<360; i=i+stepPlane)
	{
		preload_imgs += '<img src="'+urlServer + dirPlaneImg + 'plane' + i + '.png" height="1" width="1" />';
	}
	preload_imgs += '<img src="'+dirImg+'etapes/echec_fr.jpg" width="1" height="1" border="0" />';
	preload_imgs += '<img src="'+dirImg+'etapes/felicitations1_fr.png" width="1" height="1" border="0" />';
	preload_imgs += '<img src="'+dirImg+'etapes/felicitations2_fr.png" width="1" height="1" border="0" />';
	preload_imgs += '<img src="'+dirImg+'etapes/felicitations3_fr.png" width="1" height="1" border="0" />';
	preload_imgs += '<img src="'+dirImg+'etapes/felicitations4_fr.png" width="1" height="1" border="0" />';
	//$('preloadContent').update($('preloadContent').innerHTML + preload_imgs);
	new Insertion.Bottom('preloadContent', preload_imgs);


	iconplane.image = urlServer + dirPlaneImg + 'plane'+defaultNumeroPlane+'.png';
	iconplane.iconSize = new GSize(longPlane, longPlane);
	iconplane.shadowSize = new GSize(longPlane, longPlane);
	iconplane.iconAnchor = new GPoint(longPlane/2, longPlane/2);
	iconplane.infoWindowAnchor = new GPoint(longPlane/2, longPlane/2);
	myPlane = new GMarker(new GLatLng(lat, long), {icon:iconplane, clickable:false, draggable:false});	
	map.addOverlay(myPlane);
	
	if(debug)
	{
		polyline = new GPolyline(pntItineraire, "#ff0000", 10);
		map.addOverlay(polyline);
	}
	
	eventKeydown = GEvent.addDomListener(document, "keydown", function(e) {
		if(is_eventKeydown)
		{
			activatedTouche = window.event ? e.keyCode : e.which;			
			if(!is_intervalKeymove)
			{
				intervalKeymove = setInterval("keymove()", valueRefresh);
				is_intervalKeymove = true;
			}
		}
	});
	
	GEvent.addDomListener(document, "keyup", function(e) {
		if(is_eventKeydown)
		{
			activatedTouche = window.event ? e.keyCode : e.which;
			keymove();
			activatedTouche = 0;
			window.clearInterval(intervalKeymove);
			is_intervalKeymove = false;
		}
	});
	

	eventClick = GEvent.addListener(map, "click", function(overlay, point)
		{
			eventclick(point);
		}
	);
	

	$('btnBegin').show();
	$('messageDirection').update(getLang('cliquer_decollage'));
	
	//$('preloadContent').hide();
}


function eventclick(point)
{
	if(is_eventClick && point!=undefined)
	{
		pointDirection = point;
		anglePlaneNew = 180 + getAngle(point, new GPoint(long, lat));				
		anglePlaneNew = stepPlane * Math.floor((anglePlaneNew - stepPlane/2) / stepPlane) + stepPlane;
		if(anglePlaneNew >= 360) anglePlaneNew = anglePlaneNew - 360;
		
		//mytest.innerHTML = pointDirection.x + ' x ' + pointDirection.y + '<br>' + mytest.innerHTML;
		//mytest.innerHTML = 'anglePlaneNew = ' + anglePlaneNew + '<br>' + mytest.innerHTML;
		
		var angleOppose = anglePlaneNew + 180;
		if(angleOppose >= 360) angleOppose = angleOppose - 360;
		
		if(angleOppose < 180)
		{
			if(anglePlane < angleOppose || anglePlane > anglePlaneNew)
			{
				sensPlane = -1 * stepPlane;
			} else 
			{
				sensPlane = stepPlane;
			}
		} else {
			if(anglePlane < angleOppose && anglePlane > anglePlaneNew)
			{
				sensPlane = -1 * stepPlane;
			} else 
			{
				sensPlane = stepPlane;
			}
		}
		movePlaneOnClick();
	}
}


function loadPlane()
{
	if(isRequest) return false;
	
	$('messageDirection').update('');
	popup_close();
	
	$('btnBegin').hide();
	//$('btnStart').hide();
	if(decollagePlane==false)
	{
		decollagePlane = true;
		$('contentHTML').style.backgroundColor = '#000000';
		$('contentHTML').update('<div align="center">'+getFlashVideo('intro_decollage', getLang('flv_decollage'), 400, 348)+'</div><div align="right"><a href="#" onclick="$(\'contentHTML\').update(\'\'); startPlane(); return false;" style="color:#fff; font-size:10px; margin-right:10px;">'+getLang('passer_video')+'</a></div>');
		
		getFlashPlayerVideo('goodie1_fr', 512, 288)
		
		$('contentHTML').show();
		$('map').hide();
	} else {
		startPlane();
	}
}

/*
function zoomFromTo(fromZoom, toZoom, step, callback)
{
	if(debug)
	{
		map.setCenter(new GLatLng(lat, long), toZoom);
		window.setTimeout(callback, 0);
		return;
	}
	
	var refreshtime = 2000;		
	if(fromZoom > toZoom) fromZoom -= step;
		else fromZoom += step;
	
	map.setCenter(new GLatLng(lat, long), fromZoom);
		
	zoom = fromZoom;
	
	if(fromZoom != toZoom)
		window.setTimeout('zoomFromTo('+fromZoom+', '+toZoom+', '+step+', \''+callback+'\')', refreshtime);
	else if(callback != null)
		window.setTimeout(callback, 0);
}
*/

// initialisation étape
function initStage(idStage)
{
	if(isRequest) return false;
	
	timeLimit = timeLimitConfig;
	
	type_message_direction = '';
	
	// initialisation bagage
	$('game_goodies').update('<a href="#" onclick="show_goodies(); return false;"><img src="'+dirImg+'bagage.jpg" height="89" width="141" border="0" /></a>');
	
	$('game_maquette').update('<img src="'+dirImg+'etapes/maquette'+(idStage)+'.jpg" />');
	$('infoPiecesAvion').update((idStage-1) + ' ' + getLang('pieces_trouvees'));
	
	var nbGoodies = 0;
	var msg = '';
	for(var i=0; i<UserGoodie.length; i++) if(UserGoodie[i]==true) { nbGoodies++; }
	$('infoGoodies').update('<a href="#" onclick="show_goodies(); return false;">'+nbGoodies + ' '+ getLang('goodies_trouves') +'</a>');
	
	$("fuel_restant").update(Math.round(timeLimit/10));
	$('fuel_alerte').hide();
	$('fuel_aiguille').update('<img src="'+dirImg+'fuel5.png" width="64" height="32" />');
	$('fuel_aiguille').show();
	
	// preload images
	var preload_imgs = '';	
	preload_imgs += getPreloadVideo('felicitations'+idStage);
	//$('preloadContent').update(preload_imgs);
	new Insertion.Bottom('preloadContent', preload_imgs);
	
	var preload_imgs = '';
	preload_imgs += '<img src="'+dirImg+'etapes/felicitations1_fr.png" width="1" height="1" border="0" />';
	preload_imgs += '<img src="'+dirImg+'etapes/felicitations2_fr.png" width="1" height="1" border="0" />';
	preload_imgs += '<img src="'+dirImg+'etapes/felicitations3_fr.png" width="1" height="1" border="0" />';
	preload_imgs += '<img src="'+dirImg+'etapes/felicitations4_fr.png" width="1" height="1" border="0" />';
	preload_imgs += '<img src="'+dirImg+'etapes/feuille_route_'+idStage+'_fr.png" width="1" height="1" border="0" />';
	new Insertion.Bottom('preloadContent', preload_imgs);
	
	
	var itineraire = etapeConfig[idStage];
	ligneItineraire = new Array();

	var points = itineraire.split(";");
	
	pntItineraire = new Array();
	var iligneItineraire = 0;
	for(var i=0; i<points.length; i++)
	{
		var coord = points[i].split(",");
		pntItineraire[i] = new GLatLng(coord[0]*1,  coord[1]*1);
		
		if(i > 0)
		{
			var pntA = new GPoint(pntItineraire[i].lng(), pntItineraire[i].lat())
			var pntB = new GPoint(pntItineraire[i-1].lng(), pntItineraire[i-1].lat());
			ligneItineraire[iligneItineraire] = new Array();
			ligneItineraire[iligneItineraire]['a'] = pntItineraire[i].lat() - pntItineraire[i-1].lat();
			ligneItineraire[iligneItineraire]['b'] = -1 * (pntItineraire[i].lng() - pntItineraire[i-1].lng());
			ligneItineraire[iligneItineraire]['c'] = -1 * (pntItineraire[i-1].lng() * pntItineraire[i].lat()) + (pntItineraire[i].lng() * pntItineraire[i-1].lat());
			ligneItineraire[iligneItineraire]['n'] = Math.sqrt(Math.pow(ligneItineraire[iligneItineraire]['a'], 2) + Math.pow(ligneItineraire[iligneItineraire]['b'], 2));	
			ligneItineraire[iligneItineraire]['p'] = (pntItineraire[i].lng() - pntItineraire[i-1].lng()) / ligneItineraire[iligneItineraire]['n'];
			ligneItineraire[iligneItineraire]['q'] = (pntItineraire[i].lat() - pntItineraire[i-1].lat()) / ligneItineraire[iligneItineraire]['n'];
			ligneItineraire[iligneItineraire]['r'] = getAngle(pntB, pntA);
			ligneItineraire[iligneItineraire]['d'] = getDistanceBetween2Points(pntA, pntB);
			iligneItineraire++;
		}
	}
	
	/* initialisation position carte/Avion */
	long = pntItineraire[0].lng();
	lat = pntItineraire[0].lat();
	
	iLigneActive = 0;
	
	/*$('divMaquette').update('<img src="'+dirImg+'etapes/maquette'+idStage+'.png" />');
	$('divGoodies').update('<img src="'+dirImg+'etapes/bagage.png" />');
	$('strMaquette').update('0 pièce trouvée');
	$('strGoodies').update('0 goodie');
	*/
}



function refreshFuel()
{
	if(isRequest) return false;
	
	var maintenant = new Date();
	fuel = timeLimit - (maintenant.getTime() - timeGo.getTime());
	
	// voix du perso
	if(is_sound && is_sound_perso == false && soundGame['perso_etape_'+idStage] != undefined)
	{	
	 	if(Math.floor( Math.abs( Math.random() * 24 )) == 2)
		{
			var rndSound = getRandomElement(soundGame['perso_etape_'+idStage]);
			if(rndSound)
			{
				$('soundActionPerso').update(getFlashSound('voix_perso', rndSound));
				is_sound_perso = true;
			}
		}
	}
	
	// si fuel < 7000
	if(fuel<7000 && $('fuel_alerte').style.display == 'none')
	{
		$('fuel_alerte').show();
		
		if(is_sound)
		{
			$('soundActionLoopAlarm').update(getFlashSoundLoop('alarme'));		
			var rndSound = getRandomElement(soundGame['fuel_critique']);
			if(rndSound)
			{
				$('soundAction').update(getFlashSound('fuel_critique', rndSound));
			}
		}
	}

	if(fuel<0)
	{
		stopStage();
		$("fuel_restant").update('0000');	
		$("messageDirection").update(getLang('etape_non_validee'));
		$('fuel_alerte').hide();
		$('soundActionLoopAlarm').update('');
		
		$('contentHTML').style.backgroundColor = '#000000';
		$('contentHTML').update('<p align="center">'+getFlashVideo('crash', getLang('flv_crash'), 400, 348)+'</p>');
		$('contentHTML').show();
		
	} else {
		$("fuel_restant").update(Math.round(fuel/10));
		
		var newImgFuel = Math.ceil(fuel/10000);
		
		if(imgFuel != newImgFuel)
		{
			imgFuel = newImgFuel;
			$('fuel_aiguille').update('<img src="'+dirImg+'fuel' + imgFuel + '.png" width="64" height="32" />');
		}
	}		
}


function initParamZoomAndStep()
{
	//zoom
	if(zoomConfig[idStage] != undefined)
	{
		zoom = zoomConfig[idStage];
	} else {
		zoom = zoomParam;
	}
	
	// step
	if(stepHConfig[idStage] != undefined)
	{
		stepH = stepHConfig[idStage];		
	} else {
		stepH = stepHParam;
	}	
	stepV = stepH * 2/3;
}


function startPlane()
{	
	if(isRequest) return false;
	
	var preload_imgs = '';
	preload_imgs += getPreloadVideo('perdu');
	preload_imgs += getPreloadVideo(getLang('flv_crash'));
	new Insertion.Bottom('preloadContent', preload_imgs);
	
	$('contentHTML').hide();
	$('map').show();
	
	$('game_rebour').update('');
	$('game_rebour').update(getFlash(''+dirImg+'321', 100, 100));
	$('game_rebour').show();
	
	if(is_sound)
	{
		var rndSound = getRandomElement(soundGame['decollage']);
		if(rndSound)
		{
			$('soundAction').update(getFlashSound('decollage', rndSound));
		}
	}
	
	zoom = 7;
	
	initParamZoomAndStep();
	map.setCenter(new GLatLng(lat, long), zoom);
	
	// ajout visuel arrivée
	var iconDestination = new GIcon(); 
	iconDestination.image = dirImg+'etapes/piece_' + idStage + '.png';
	iconDestination.iconSize = new GSize(145, 120);		
	iconDestination.shadowSize = new GSize(145, 120);
	iconDestination.iconAnchor = new GPoint(80, -30);
	myDestination[idStage] = new GMarker(new GLatLng(pntItineraire[pntItineraire.length-1].lat()+1, pntItineraire[pntItineraire.length-1].lng()), {icon:iconDestination, clickable:false, draggable:false});	
	map.addOverlay(myDestination[idStage]);
	
	// ajout visuel bonus
	if(UserGoodie[bonusGoodies[idStage]]!=true && BonusConfig[idStage] != undefined && BonusConfig[idStage] !=  null)
	{
		var iconDestination = new GIcon();
		iconDestination.image = dirImg+'etapes/piece_bonus_' + idStage + '.png';
		iconDestination.iconSize = new GSize(145, 120);
		iconDestination.shadowSize = new GSize(145, 120);
		iconDestination.iconAnchor = new GPoint(80, -30);
		myBonus[idStage] = new GMarker(new GLatLng(BonusConfig[idStage][0]+1, BonusConfig[idStage][1]), {icon:iconDestination, clickable:false, draggable:false});	
		map.addOverlay(myBonus[idStage]);
	}
	
	if(debug)
	{
		projection = new GMarker(new GLatLng(lat, long));	
		map.addOverlay(projection);
	}
	
	window.setTimeout('startStage()', 2100);
	//goto();
}

function startStage()
{
	timeGo = new Date();
	setIntervalFuel = setInterval("refreshFuel()", 100);
	
	//$("btnStart").hide();
	$('messageDirection').update(getLang('diriger_avion'));
	
	if(is_sound) $('soundActionLoopPlane').update(getFlashSoundLoop('avion'));
	
	// activer les évènements clavier + souris
	is_eventKeydown = true;
	is_eventClick = true;
	gameStopped = false;	
	
	$('game_rebour').hide();
}




function movePlaneOnClick()
{
	if(isRequest) return false;
	
	if(gameStopped) return;
	
	var movePlane = false;
	
	// rotation petit à petit de l'avion
	if(anglePlane != anglePlaneNew)
	{
		anglePlane += sensPlane;
		movePlane = true;
	
	// avancer l'avion jusqu'à la position
	} else {
		
		//mytest.innerHTML = long + ' x ' + lat + '<br>' + mytest.innerHTML;
		if(anglePlane < 90)
		{
			if(long > pointDirection.x && lat < pointDirection.y) movePlane = true;
			
		} else if(anglePlane < 180)
		{
			if(long < pointDirection.x && lat < pointDirection.y) movePlane = true;
		
		} else if(anglePlane < 270)
		{
			if(long < pointDirection.x && lat > pointDirection.y) movePlane = true;
		
		} else
		{
			if(long > pointDirection.x && lat > pointDirection.y) movePlane = true;
		}		
	}
	
	if(movePlane)
	{
		goto();
		setTimeoutMovePlane = window.setTimeout("movePlaneOnClick()", valueRefresh);
	}		
	
	return false;
}



function goto()
{
	if(isRequest) return false;
	
	// focus sur la fenetre pour la gestion des évènements clavier
	focusWindow();
	
	if(anglePlane < 0) anglePlane = 360 + anglePlane;
	if(anglePlane >= 360) anglePlane = anglePlane - 360;
	
	// l'angle a changé ? on change l'image de l'avion ?
	var newNumeroPlane = stepPlane * Math.floor((anglePlane - stepPlane/2) / stepPlane) + stepPlane;
	if(newNumeroPlane < 0) newNumeroPlane = 360 + newNumeroPlane;
	if(newNumeroPlane >= 360) newNumeroPlane = 360 - newNumeroPlane;
	if(newNumeroPlane != numeroPlane)
	{
		myPlane.setImage(urlServer + dirPlaneImg + 'plane'+ newNumeroPlane + '.png');
		numeroPlane = newNumeroPlane;
	}
	//divangle.innerHTML = 'angle = ' + anglePlane;
	
	// nouvelle position de l'avion
	
	lat += (stepV * Math.sin(Math.PI * anglePlane / 180))/200;
	long += -(stepH * Math.cos(Math.PI * anglePlane / 180))/200;
	//alert(lat + ' x ' + long);
	myPlane.setPoint(new GLatLng(lat, long));
	
	// vérification que l'avion s'approche du bord
	MapPlaneLocation = map.fromLatLngToDivPixel(new GLatLng(lat, long));
	CheckLocationPlane();
	
	//map.panTo(new GLatLng(lat, long));
	
	
	// distance et différence angle par rapport à l'itinéraire :
	// recherche de la ligne de l'itineraire la plus proche
	var distancePlane = Infinity;
	var iLigneProche = 0;
	var projete;
	//var test = '';
	var max_iLigne = ligneItineraire.length > iLigneActive+2 ? iLigneActive+2 : ligneItineraire.length;
	
	if(iLigneActive != ligneItineraire.length - 1)
	{
		for(var i=iLigneActive; i < max_iLigne; i++)
		{
			// coordonnées du projeté orthogonal de la position de l'avion sur la droite
			var S = ligneItineraire[i]['p'] * (long - pntItineraire[i].lng()) + ligneItineraire[i]['q'] * (lat - pntItineraire[i].lat());
			var Xh = 1*pntItineraire[i].lng() + 1*(S * ligneItineraire[i]['p']);
			var Yh = 1*pntItineraire[i].lat() + 1*(S * ligneItineraire[i]['q']);
			var projete_tmp = new GLatLng(Yh, Xh);
			
			// distance du projeté de l'avion au point initial de la ligne
			var distanceprojete = getDistanceBetween2Points(new GPoint(Xh, Yh), new GPoint(1*pntItineraire[i].lng(), 1*pntItineraire[i].lat()));		
			
			// distance de l'avion à la droite
			var distance_tmp = Math.abs(ligneItineraire[i]['a'] * long + ligneItineraire[i]['b'] * lat + ligneItineraire[i]['c']) / ligneItineraire[i]['n'];
			
			// si distance du projeté est inférieur à la distance de la ligne et si distance du projeté est le meilleur
			if(distanceprojete < ligneItineraire[i]['d'] && distance_tmp < distancePlane)
			{
				distancePlane = distance_tmp;
				iLigneProche = i;
				projete = projete_tmp;
			}
		}
		
		iLigneActive = iLigneProche;		
		if(debug) projection.setPoint(projete);
	}
	
	var message = '';
	
	// calcul angle par rapport à la destination
	var angleAvionDestination = 180 + getAngle(new GPoint(pntItineraire[iLigneActive+1].lng(), pntItineraire[iLigneActive+1].lat()), new GPoint(long, lat));
	if(angleAvionDestination >= 360) angleAvionDestination = angleAvionDestination - 360;
	if(angleAvionDestination < 0) angleAvionDestination = 360 + angleAvionDestination;
	//divcoord.innerHTML = 'toDestination = '+angleAvionDestination+'<br>anglePlane = '+anglePlane+'<br>'+divcoord.innerHTML;
	
	//var diffAngle = anglePlane - ligneItineraire[iLigneProche]['r'];
	/*
	if(distanceprojete > 1.5 * ligneItineraire[iLigneActive]['d'] || distancePlane > limitFromItineraire)
	{
		// remettre dans le droit chemin			
		var numeroPlane = stepPlane * Math.floor((angleAvionDestination - stepPlane/2) / stepPlane) + stepPlane;
		anglePlane = numeroPlane;
		myPlane.setImage(urlServer + dirPlaneImg + 'plane'+ numeroPlane + '.png');
		//divcoord.innerHTML = 'anglePlane = '+anglePlane+'<br>'+divcoord.innerHTML;
		
		message = 'On t\'a redirigé !';
	
	} else {
	*/
	
		// vérification de l'angle de l'avion
		var angleOppose = angleAvionDestination + 180;
		if(angleOppose >= 360) angleOppose = angleOppose - 360;
		
		var diffAngleMoins = angleAvionDestination - stepPlane/2;
		if(diffAngleMoins < 0) diffAngleMoins = 360 + diffAngleMoins;
		
		var diffAnglePlus = angleAvionDestination + stepPlane/2;
		if(diffAnglePlus >= 360) diffAnglePlus = diffAnglePlus - 360;
		

		var current_type_message_direction = '';
		if(angleOppose<180)
		{
			if((diffAnglePlus <= angleOppose && anglePlane >= diffAnglePlus && anglePlane <= angleOppose)
				|| (diffAnglePlus >= angleOppose && (anglePlane >= diffAnglePlus || anglePlane <= angleOppose)))
			{
				current_type_message_direction = 'gauche';
			} else if(anglePlane >= angleOppose && anglePlane <= diffAngleMoins)
			{
				current_type_message_direction = 'droite';
			} else
			{
				current_type_message_direction = 'tout_droit';
			}
		} else {
			if((diffAngleMoins >= angleOppose && anglePlane <= diffAngleMoins && anglePlane >= angleOppose)
				|| (diffAngleMoins <= angleOppose && (anglePlane <= diffAngleMoins || anglePlane >= angleOppose)))
			{
				current_type_message_direction = 'droite';
			} else if(anglePlane <= angleOppose && anglePlane >= diffAnglePlus)
			{
				current_type_message_direction = 'gauche';
			} else
			{
				current_type_message_direction = 'tout_droit';
			}
		}
		

	/*	
anglePlane = 315
diffAnglePlus = 292
diffAngleMoins = 270
angleAvionDestination = 281
angleOppose = 101
current_type_message_direction = tout_droit
		*/
		
		if(debug) $('debugmsg').update('anglePlane = '+anglePlane+ ' / diffAnglePlus = '+diffAnglePlus+' / diffAngleMoins = '+diffAngleMoins+' / angleAvionDestination = '+angleAvionDestination+' / angleOppose = '+angleOppose+' / current_type_message_direction = ' + current_type_message_direction + '<br />'+$('debugmsg').innerHTML);
		
		if(type_message_direction != current_type_message_direction)
		{
			if(is_sound)
			{
				var rndSound = getRandomElement(soundGame['direction_'+current_type_message_direction]);
				if(rndSound) $('soundAction').update(getFlashSound('message_direction', rndSound));
				is_sound_perso = true;
			}
			
			$("messageDirection").update(getLang('direction_'+current_type_message_direction));
			
			type_message_direction = current_type_message_direction;
		}
	//}
	
	//divcoord.innerHTML = 'angleOppose = '+angleOppose+'<br>angleAvionDestination = '+angleAvionDestination+'<br>anglePlane = '+anglePlane+'<br><br>'+divcoord.innerHTML;
	
	
	// vérifier que l'avion est passé sur la destination		
	var cadre = map.fromLatLngToDivPixel(new GLatLng(pntItineraire[pntItineraire.length-1].lat(), pntItineraire[pntItineraire.length-1].lng()));
	var positionPlane = map.fromLatLngToDivPixel(new GLatLng(lat, long));		
	//divcoord.innerHTML = 'coord = '+positionPlane.x+' x '+positionPlane.y+'<br>'+(cadre.x - 40)+' / '+(cadre.x + 40)+' x '+(cadre.y + 20)+' / '+(cadre.y + 100);		
	if(positionPlane.y > cadre.y - 60
		&& positionPlane.y < cadre.y + 80
			&& positionPlane.x > cadre.x - 40
				&& positionPlane.x < cadre.x + 40)
	{
		// arreter les process
		stopStage();		
		//$('soundAction').update(getFlashSound('ding', 'ding'));	
		
		// désactiver les sons
		$('soundActionLoopPlane').update('');
		$('soundActionLoopAlarm').update('');
		
		//$('soundAction').update(getFlashSound('moveit', 'moveit'));	
		
		
		// on vire l'avion
		//myPlane.setPoint(new GLatLng(pntItineraire[0].lat(), pntItineraire[0].lng()));
		
		// goodies
		if(stageGoodies[idStage]) UserGoodie[stageGoodies[idStage]] = true;
		var nbGoodies = 0;
		for(var i=0; i<UserGoodie.length; i++) if(UserGoodie[i]==true) nbGoodies++;	
		$('infoGoodies').update('<a href="#" onclick="show_goodies(); return false;">'+nbGoodies + ' '+ getLang('goodies_trouves') +'</a>');
		// enregistrer l'étape
		stageEnd();
		
		idStage = 1 * idStage;
		
		if(User['userLastStageReleased']==undefined || idStage > 1 * User['userLastStageReleased']) User['userLastStageReleased']=idStage;
		
		
		if(idStage<6) $('game_maquette').update('<img src="'+dirImg+'etapes/maquette'+(idStage+1)+'.jpg" />');
		$('infoPiecesAvion').update((idStage==6 ? 5 : idStage) + ' ' + getLang('pieces_trouvees'));
		
		//alert('maquette'+(idStage+1)+'.jpg');
		
		$("messageDirection").update(getLang('felicitations'));

		//$('soundAction').update(getFlashSound('chunky', 'chunky'));
		//map.setCenter(new GLatLng(pntItineraire[pntItineraire.length-1].lat()-1, pntItineraire[pntItineraire.length-1].lng()+1), zoom);
		
		// animation du bagage
		$('game_goodies').update(getFlash('FLV/valise', 141, 89));		
		

			
		// perso qui danse
		$('contentHTML').style.backgroundColor = "transparent";
		$('contentHTML').update(getFlashVideo460('felicitations', 'felicitations'+idStage, 460, 400));
		$('contentHTML').show();
		
		// supprimer pièce de l'avion sur la carte
		setTimeout('removeDestination()', 1000);
		
		// écran de fin d'étape
		setTimeout('endStage()', 3000);
	}
	
	
	if(UserGoodie[bonusGoodies[idStage]]!=true && BonusConfig[idStage] != undefined && myBonus[idStage])
	{
		// vérifier que l'avion est passé sur le bonus
		var cadre = map.fromLatLngToDivPixel(new GLatLng(BonusConfig[idStage][0]+1, BonusConfig[idStage][1]));		
		//divcoord.innerHTML = 'coord = '+positionPlane.x+' x '+positionPlane.y+'<br>'+(cadre.x - 40)+' / '+(cadre.x + 40)+' x '+(cadre.y + 20)+' / '+(cadre.y + 100);		
		if(positionPlane.y > cadre.y - 60
			&& positionPlane.y < cadre.y + 80
				&& positionPlane.x > cadre.x - 40
					&& positionPlane.x < cadre.x + 40)
		{
			if(bonusGoodies[idStage]) UserGoodie[bonusGoodies[idStage]] = true;
			var nbGoodies = 0;
			for(var i=0; i<UserGoodie.length; i++) if(UserGoodie[i]==true) nbGoodies++;	
			$('infoGoodies').update('<a href="#" onclick="show_goodies(); return false;">'+nbGoodies + ' goodies</a>');
			if(is_sound) $('soundAction').update(getFlashSound('ding', 'ding'));
			
			// animation du bagage
			$('game_goodies').update(getFlash('FLV/valise', 141, 89));	
			
			map.removeOverlay(myBonus[idStage]);
			myBonus[idStage] = false;
		}
	}
	

	//mytest.innerHTML = '<span style="font-size:8px; font-family:Courier">Distance de l\'itinéraire : ' + arrondi(distancePlane, 3) +'<br />iligneItineraire = ' + iLigneProche + '<br><br>P = ' + arrondi(long, 3) + ' x ' + arrondi(lat, 3) + '<br>H = '+ arrondi(projete.lng(), 3) +' x '+ arrondi(projete.lat(), 3) +'<br />angle droite = '+ligneItineraire[iLigneProche]['r']+'<br />diffAngle = '+diffAngle+'</span>';
}

function getListReplay()
{	
	if(User['userLastStageReleased']==1) return '';
	
	var content = '<select id="selectStageToReplay">';
	for(var i=User['userLastStageReleased']; i>=1; i--)
	{
		content += '<option value="'+i+'">'+getLang('rejouer_etape'+i)+'</option>';
	}
	content += '</select>';
	
	return content;
}


function endStage()
{
	if(isRequest) return false;	

	var html = '';
	
	// si l'utilisateur non connecté => lien vers setUser
	if(User['codeIdentifiant'] == undefined)
	{	
		//alert('si l\'utilisateur non connecté => lien vers setUser');
		//html += '<img src="'+dirImg+'etapes/fin_etape2_'+idStage+'_fr.jpg" width="460" height="400" border="0" />';
		
		$('game_link_identifier').update('<a href="#" onclick="show_setUser(); return false;" style="height:400px; width:460px; display:block; background:url('+dirImg+'1.gif);"><img id="imgfelicitations" src="'+dirImg+'etapes/felicitations1_fr.png" width="460" height="400" border="0" /></a>');
		$('game_link_identifier').show();
		png2ie6('imgfelicitations');
		$('game_link_identifier').hide();
		new Effect.SlideDown('game_link_identifier');
		
		// preload image du formulaire
		var preload_imgs = '<img src="'+dirImg+'formulaire_debut_fr.jpg" width="1" height="1" border="0" />';
		//$('preloadContent').update(preload_imgs);
		new Insertion.Bottom('preloadContent', preload_imgs);
		
		
	// si l'utilisateur connecté et étape 6 :
	} else if(idStage==6)
	{
		//alert(' si l\'utilisateur connecté et étape 6');
		
		// vérifier que l'adresse postale est enregistré sinon afficher setPostalAddress
		var html = '<img id="imgfelicitations" src="'+dirImg+'etapes/felicitations4_fr.png" width="460" height="150" border="0" />';
		
		if(User['userPostalCode'] == '') User['userPostalCode'] = undefined;
		
		if(form_is_postaladdress == true && User['userPostalCode'] == undefined) // bouton adresse
		{
			html += '<br /><a href="#" onclick="show_setPostalAddress(); return false;"><img id="imgbtnadresse" src="'+dirImg+'btn_adresse.png" width="374" height="25" border="0" /></a>';
			
			// preload image du formulaire
			var preload_imgs = '<img src="'+dirImg+'formulaire_fin_fr.jpg" width="1" height="1" border="0" />';
			//$('preloadContent').update(preload_imgs);
			new Insertion.Bottom('preloadContent', preload_imgs);
			
		}
		
		
		html += '<br /><table align="center"><tr><td>'+getListReplay()+'</td><td><a href="#" onclick="replay(); return false;"><img id="imgRejouer" src="'+dirImg+'btn_rejouer.png" width="'+imagesGame['btn_rejouer']['width']+'" height="'+imagesGame['btn_rejouer']['height']+'" border="0" align="absmiddle" /></a></td></tr></table>';
		
		$('game_link_identifier').update(html);
		$('game_link_identifier').show();
		png2ie6('imgfelicitations');		
		
		if(form_is_postaladdress == true && User['userPostalCode'] == undefined) // bouton adresse
		{
			png2ie6('imgbtnadresse');
		}		
		png2ie6('imgRejouer');		
		iniCustomSelect();
		
		$('game_link_identifier').hide();
		new Effect.SlideDown('game_link_identifier', {duration:5});
		
	
	// si l'utilisateur connecté mais étape suivante non active => replay
	} else if(etapeConfig[idStage+1] == undefined)
	{ 
		//alert('si l\'utilisateur connecté mais étape suivante non active => replay');
		/*
		html += '<map name="fin_etape2" id="fin_etape2"><area shape="rect" coords="363,359,453,395" href="#" onclick="replay(); return false;" /></map>';
		$('game_rejouer_bas').update(getListReplay());
		$('game_rejouer_bas').show();
		*/
		
		$('game_link_identifier').update('<img id="imgfelicitations" src="'+dirImg+'etapes/felicitations2_fr.png" width="460" height="100" border="0" /><br /><table align="center"><tr><td>'+getListReplay()+'</td><td><a href="#" onclick="replay(); return false;"><img id="imgRejouer" src="'+dirImg+'btn_rejouer.png" width="'+imagesGame['btn_rejouer']['width']+'" height="'+imagesGame['btn_rejouer']['height']+'" border="0" align="absmiddle" /></a></td></tr></table>');
		$('game_link_identifier').show();
		png2ie6('imgfelicitations');
		png2ie6('imgRejouer');
		$('game_link_identifier').hide();
		new Effect.SlideDown('game_link_identifier');
		
		setTimeout("iniCustomSelect()", 1000);
	

	
	// si l'utilisateur connecté et étape suivante active, lien vers l'étape suivante :
	} else {
		//alert('si l\'utilisateur connecté et étape suivante active, lien vers l\'étape suivante');
		//html += '<a href="#continue" onclick="gotoStage('+(idStage+1)+'); return false;" ><img src="'+dirImg+'etapes/fin_etape1_'+idStage+'_fr.jpg" width="460" height="400" border="0" border="0" /></a>';
		
		$('game_link_identifier').update('<a href="#continue" onclick="gotoStage('+(idStage+1)+'); return false;" style="height:400px; width:460px; display:block; background:url('+dirImg+'1.gif);" ><img id="imgfelicitations" src="'+dirImg+'etapes/felicitations3_fr.png" width="460" height="400" border="0" /></a>');
		$('game_link_identifier').show();
		png2ie6('imgfelicitations');
		$('game_link_identifier').hide();
		new Effect.SlideDown('game_link_identifier');
	
	}
}

function showZone(id)
{
	$(id).show();
}


function removeDestination()
{
	// supprimer pièce de l'avion
	map.removeOverlay(myDestination[idStage]);
}


function replay()
{
	if(idStage==1)
	{
		gotoStage(idStage);
	} else {
		var selectStageToReplay = $('selectStageToReplay');
		gotoStage(selectStageToReplay[selectStageToReplay.selectedIndex].value);		
	}
}


function gotoStage(stage_id)//replay()
{
	if(isRequest) return false;
	
	$('game_rejouer_haut').hide();
	$('game_rejouer_bas').hide();
	$('game_link_identifier').hide();
	
	idStage = stage_id;
	
	initStage(idStage);
	
	initParamZoomAndStep();
	map.setCenter(new GLatLng(lat, long), zoom);
	
	anglePlane = defaultNumeroPlane;
	myPlane.setImage(urlServer + dirPlaneImg + 'plane'+ defaultNumeroPlane + '.png');
	numeroPlane = defaultNumeroPlane;
	myPlane.setPoint(new GLatLng(lat, long));
	
	if(debug)
	{
		polyline = new GPolyline(pntItineraire, "#ff0000", 10);
		map.addOverlay(polyline);
	}
	
	//$('contentHTML').hide();
	$('map').show();	
	$('contentHTML').update('');
	$('contentHTML').hide();
	//new Effect.SlideUp('contentHTML', {duration:1});
	
	$('btnBegin').show();
	$('btnMaps').show();
	$('messageDirection').update(getLang('cliquer_decollage'));
}


function crashStage()
{	
	// supprimer pièce bonus
	if(UserGoodie[bonusGoodies[idStage]]!=true && BonusConfig[idStage] != undefined && myBonus[idStage])
	{
		map.removeOverlay(myBonus[idStage]);
		myBonus[idStage] = false;
	}
	
	
	$('soundActionLoopPlane').update('');
	$('soundActionLoopAlarm').update('');
	
	$("messageDirection").update(getLang('non_validee'));	

	$('game_link_identifier').update('<a href="#" onclick="gotoStage(idStage); return false;" style="height:400px; width:460px; display:block; background:url('+dirImg+'1.gif);"><img id="imgRejouer" src="'+dirImg+'btn_rejouer_460x400.png" width="460" height="400" border="0" /></a>');
	$('game_link_identifier').show();
	png2ie6('imgRejouer');
	$('game_link_identifier').hide();
	new Effect.SlideDown('game_link_identifier');
	
	$('contentHTML').style.backgroundColor = "#000000";
	$('contentHTML').update(getFlashVideo460('perdu', 'perdu', 460, 400));
	$('contentHTML').show();
	
	// supprimer pièce de l'avion sur la carte
	setTimeout('removeDestination()', 500);
}


function stopStage()
{
	$('btnMaps').hide();
	
	activatedTouche = 0;
	window.clearInterval(intervalKeymove);
		
	$('fuel_alerte').hide();
	$('soundActionLoopPlane').update('');
	$('soundActionLoopAlarm').update('');	
	
	window.clearInterval(setIntervalFuel);
	window.clearTimeout(setTimeoutMovePlane);
	
	// désactiver les évènements clavier + souris
	is_eventKeydown = false;
	is_eventClick = false;
	gameStopped = true;
}


function arrondi(nbr, nbvir)
{
	return Math.round(nbr * Math.pow(10, nbvir)) / Math.pow(10, nbvir);
}


// vérification que l'avion s'approche du bord => si oui on recentre la carte sur l'avion
function CheckLocationPlane()
{		
	var bounds = map.getBounds();		
	MapSouthWestBoundPoint = map.fromLatLngToDivPixel(bounds.getSouthWest());		
	MapNorthEastBoundPoint = map.fromLatLngToDivPixel(bounds.getNorthEast());			
		
	if(MapPlaneLocation.x > (MapNorthEastBoundPoint.x - limitFromBoundHor)
		|| MapPlaneLocation.x < (MapSouthWestBoundPoint.x + limitFromBoundHor)
		|| MapPlaneLocation.y < (MapNorthEastBoundPoint.y + limitFromBoundVer)
		|| MapPlaneLocation.y > (MapSouthWestBoundPoint.y - limitFromBoundVer))
	{
		map.panTo(new GLatLng(lat, long));
	}		
}


// distance entre deux points sur la carte
function getDistanceBetween2Points(pointA, pointB)
{
	var distance = Math.sqrt( Math.pow(pointB.x - pointA.x, 2) + Math.pow(pointB.y - pointA.y, 2) );
	return distance;
}


// angle entre deux points
function getAngle(pointA, pointB)
{
	var AB = getDistanceBetween2Points(new GPoint(pointA.x, pointA.y), new GPoint(pointB.x, pointB.y));
	var BH = getDistanceBetween2Points(new GPoint(pointB.x, pointB.y), new GPoint(pointB.x, pointA.y));
	var angle = 180 * Math.asin( BH / AB ) / Math.PI;		
	
	if(pointB.x >= pointA.x && pointB.y >= pointA.y)
		angle = 180 - angle;
	else if(pointB.x >= pointA.x && pointB.y <= pointA.y)
		angle = angle + 180;
	else if(pointB.x <= pointA.x && pointB.y <= pointA.y)
		angle = 360 - angle;		
	
	return angle;
}


// faire le focus sur la fenêtre
function focusWindow()
{
	window.focus();
}




/* Debut initialisation du jeu */
var dirImg = 'img/' + $('mapLang').value + '/';

var User = new Array(); // info user
var UserGoodie = new Array(); // info user

var is_sound_perso = false;

var myDestination = new Array();
var myBonus = new Array();

var isRequest = false; // requête en cours

var maintenant = new Date();
var timeGo; // temps de départ d'une étape
var timeLimit; // temps pour finir l'étape

var eventKeydown; // evenement clavier
var eventClick; // evenement souris
var is_eventKeydown = false; // evenement activé ?
var is_eventClick = false; // evenement activé ?

var setIntervalFuel; // refresh pour le fuel
var setTimeoutMovePlane; // refresh pour le mouvement de l'avion / déplacement à la souris
var imgFuel = 0;
var fuel = 0;

var valueRefresh = valueRefreshConfig; // délai de refresh du mouvement de l'avion ou de la carte
var urlServer = '';


/* initialisation zones */
var distanceplane = $("distanceplane");
var mytest = $("mytest");
var mycoord = $("mycoord");
var divdistance = $("divdistance");
var divangle = $("divangle");
var divcoord = $("divcoord");

/* initialisation parametres avion */
var idPlaneColor = 1; // couleur de l'avion sélectionnée
var stepPlane = 22.5; // pas de rotation de l'avion
var longPlane = 124; // longueur et largeur de l'avion
var limitFromBoundHor = 100; // limite du bord gauche et droite de la map
var limitFromBoundVer = 100; // limite du bord haut et bas de la map
var limitFromItineraire = 6; // distance limite de dépassement par rapport à l'itinéraire

var stepHParam = 40; // pas horizontal
var stepH = stepHParam; 
var stepV = stepH * 2/3; // pas vertical

var anglePlane = 135; // angle à l'initialisation
var anglePlaneNew = null; // nouveau angle durant le parcours
var dirPlaneImg = 'avion/plane'+idPlaneColor+'/';

/* initialisation carte */
var map;

// initialisation position
var long;
var lat;

var zoomParam = 7; // zoom initial
var zoom = zoomParam;


/* initialisation bords de la carte */
var MapSouthWestBoundPoint = new GPoint();
var MapNorthEastBoundPoint = new GPoint();
var MapPlaneLocation = new GPoint();

/* initialisation avion */
var iconplane = new GIcon(); 
var numeroPlane = 135;
var defaultNumeroPlane = 135;


var type_message_direction = '';

var myPlane; // marker avion
var timerGoto; // interval refresh

var pntItineraire; // points de l'itinéraire
var ligneItineraire; // lignes de l'itinéraire
var iLigneActive = 0; // ligne active de l'itinéraire / la plus proche de l'avion
var projection; // projeté orthogonal de l'avion sur la ligne la plus proche
var polyline; // GPolyline des lignes de l'itinéraire

var pointDirection;
var sensPlane = 0;
var gameStopped = false;

var activatedTouche = 0;
var intervalKeymove;
var is_intervalKeymove = false;

/* Fin initialisation du jeu */