// JavaScript Document
function dimensionner(cetteDiv, cetteLargeur, cetteHauteur) {
	$(cetteDiv).style.width = cetteLargeur + 'px';
	$(cetteDiv).style.height = cetteHauteur + 'px';
}

function dimensionnerDivs() {
	// #corps et #zone_reactive ont nécessairement mêmes dimensions.
	dimensionner('cadre_monde', quartGlobe, (quartGlobe / 2));
	dimensionner('monde', quartGlobe, (quartGlobe / 2));

	var decalages = new Array(0, 0, -1, 0, -2, 0, -3, 0, 0, -.5, -1, -.5, -2, -.5, -3, -.5, 0, -3.5, -1, -3.5, -2, -3.5, -3, -3.5); // tableau des décalages exprimés en multiple de 1/4 de globe pour déplacer relativement les li de la liste par rapport à leur position initiale dans l'empilement vertical, consulter le fichier organisation.ods
	var index = 0;
	var pointeurImg = 0;
	var decalPointeur = 0;
	$$('li.localite').each(	function(liElmt) {
		idLiElmt = liElmt.readAttribute('id');
		dimensionner(idLiElmt, quartGlobe, (quartGlobe / 2));
		leftLiElmt = decalages[index] * quartGlobe;
		$(idLiElmt).style.left = leftLiElmt + 'px';
		index++;
		topLiElmt = decalages[index] * quartGlobe;
		$(idLiElmt).style.top =  topLiElmt + 'px';
		index++;
		$(idLiElmt).style.backgroundImage = 'url(' + imgsFond[pointeurImg + decalPointeur].src + ')';
		var cetElmt = {
			id : idLiElmt,
			left : leftLiElmt,
			top : topLiElmt,
			rang : decalPointeur
		}
		localites.push(cetElmt);
		decalPointeur++;
	});
}

function ajustement(pReelle) {
	// pour éviter toute dérive après mouvement, toute position avoisinant l'un des 8 huitièmes de globe à moins de 2 px est recalée sur ce quart.
	pReelle = Math.round(pReelle / (.5 * quartGlobe)) * .5 * quartGlobe;
	return pReelle;
}

function calculPas(ii) {
	var amplitude = 133.7; /* voir fichier acceleration.ods */
	return Math.exp(-ii*.167)*Math.sin(6.28*.022*ii)*amplitude;
}
function detecterSens(e) {
	var element = Event.findElement(e, 'A');
	if (element) {
		Event.stopObserving('nav', 'click', detecterSens);
		$$('a[rel="interne"]'). each( function(ceLienInt) {
			Event.stopObserving(ceLienInt.readAttribute('id'), 'click', detecterLiaison);
		});
		var idReceveur = element.readAttribute('id');
		var sens = idReceveur.sub('vers_', '');
		comptRot = 0;
		if (sens == 'plan') { // mise en place de l'accès direct au plan du site
			var liDepart;
			localites.each( function(cetteLoc) {
				if (cetteLoc.left==0 && cetteLoc.top==0) {
					liDepart = cetteLoc.id;
				}
			});
			if (liDepart != 'li10') {
				var paralleleDep = parseInt(liDepart.toArray()[2]);
				
				var meridienDep = parseInt(liDepart.toArray()[3]);
				
				// le plan du site est en li10
				var meridienArr = 0;
				var paralleleArr = 1;
				var decalageLong = (meridienArr - meridienDep);
				accesDirect(decalageLong, paralleleDep, paralleleArr);
			} else {
				Event.observe('nav', 'click', detecterSens);
				$$('a[rel="interne"]'). each( function(ceLienInt) {
					Event.observe(ceLienInt.readAttribute('id'), 'click', detecterLiaison);
				});
			}
		}
		if (sens.length == 1) {
			rot(1, sens);
		}
	}
}
function rot(nbRot, sens) {
	var i = 0;
	if (((sens == 'N') && (parseInt($('li10').getStyle('top').replace("px","")) == 0)) || ((sens == 'S') && (parseInt($('li20').getStyle('top').replace("px","")) == 0)))	{
		
		Event.observe('nav', 'click', detecterSens);
		return;
	} else {
		new PeriodicalExecuter(	function(pe) {
			if (++i > 20) { // le mouvement est décomposé en 21 déplacements
				pe.stop();
				comptRot++;
				
				if (comptRot == nbRot) {
					
					$$('ul#plus>li').each( function(ceLi) {
						ceLi.style.display = "none";
					});
					var liAffiche;
					localites.each( function(cetteLoc) {
						if (cetteLoc.left==0 && cetteLoc.top==0) {
							liAffiche = cetteLoc.id;
						}
					});
					var liAffichePlus = liAffiche + 'plus';
					$(liAffichePlus).style.display = "block";
					Event.observe('nav', 'click', detecterSens);
					$$('a[rel="interne"]'). each( function(ceLienInt) {
						Event.observe(ceLienInt.readAttribute('id'), 'click', detecterLiaison);
					});
				}
				return;
			} else {
				localites.each(	function(s) {
					if (sens == 'W') {
						var posReelle = s.left;
						posReelle += calculPas(i);
						// si dépassement à droite, renvoi à gauche
						if (posReelle > quartGlobe) {
							posReelle -= 4 * quartGlobe;
						}
						if(i == 20) {
							posReelle = ajustement(posReelle);
						}
						$(s.id).style.left = posReelle + 'px';
						s.left = posReelle;
					}
					if (sens == 'E') {
						var posReelle = s.left;
						posReelle -= calculPas(i);
						// si dépassement à gauche, renvoi à droite
						if (posReelle < (-3 * quartGlobe)) {
							posReelle += 4 * quartGlobe;
						}
						if(i == 20) {
							posReelle = ajustement(posReelle);
						}
						$(s.id).style.left = posReelle + 'px';
						s.left = posReelle;
					}
					if (sens == 'N') {
						var posReelle = s.top;
						posReelle += calculPas(i) / 2;
						// si dépassement en bas, renvoi en haut
						if (posReelle >= .5 * quartGlobe) {
							posReelle -= 4 * quartGlobe;
						}
						if(i == 20) {
							posReelle = ajustement(posReelle);
						}
						$(s.id).style.top = posReelle + 'px';
						s.top = posReelle;
					}
					if (sens == 'S') {
						var posReelle = s.top;
						posReelle -= calculPas(i) / 2;
						// si dépassement en bas, renvoi en haut
						if (posReelle <= -3.5 * quartGlobe) {
							posReelle += 4 * quartGlobe;
						}
						if(i == 20) {
							posReelle = ajustement(posReelle);
						}
						$(s.id).style.top = posReelle + 'px';
						s.top = posReelle;
					}
				});
			}
		}, .04);
	}
}

function accesDirect(ecartLong, departLat, arriveeLat) {
	var nbRot = Math.abs(ecartLong) + nbMvtLat[departLat][arriveeLat];
	if (ecartLong > 0) {
		for (var i = 1; i <= ecartLong; i++) {
			
			rot(nbRot,'W');
		}
	} else {
		for (var i = 1; i <= Math.abs(ecartLong); i++) {
			
			rot(nbRot,'E')
		}
	}
	for (var i = 1; i <= nbMvtLat[departLat][arriveeLat]; i++) {
			
			rot(nbRot, sensMvtLat[departLat][arriveeLat])
	}
}
function detecterLiaison(e) {
	$$('a[rel="interne"]'). each( function(ceLienInt) {
		Event.stopObserving(ceLienInt.readAttribute('id'), 'click', detecterLiaison);
	});
	Event.stopObserving('nav', 'click', detecterSens);
	comptRot = 0;
	var idLien = Event.findElement(e, 'A').readAttribute('id');
	var expReg = /(li\d+)vers(li\d+)/; 
	var analyse = idLien.match(expReg);
	var depart = analyse[1].toArray();
	var arrivee = analyse[2].toArray();
	var meridienDep = parseInt(depart[3]);
	var paralleleDep = parseInt(depart[2]);
	var meridienArr = parseInt(arrivee[3]);
	var paralleleArr = parseInt(arrivee[2]);
	var decalageLong = (meridienArr - meridienDep);
	accesDirect(decalageLong, paralleleDep, paralleleArr);
}

function verifFinAnim(reponse) {
	$('cadre_flash').style.display = 'none';
	$('accueil').style.display = 'none';
	$('cadre_monde').style.display = 'block';
	$('li00plus').style.display = 'block';
	$('vers_E').style.display = 'block';
	$('vers_W').style.display = 'block';
	$('vers_S').style.display = 'block';
	$('vers_N').style.display = 'block';
	$('vers_plan').style.display = 'block';
	Event.observe('nav', 'click', detecterSens);
	$$('a[rel="interne"]'). each( function(ceLienInt) {
		Event.observe(ceLienInt.readAttribute('id'), 'click', detecterLiaison);
	});
}

var quartGlobe  = 400;
var cheminImgs;
cheminImgs = 'img/' + quartGlobe + '/';
var imgsFond = new Array();

document.observe("dom:loaded", function() {
	i = 0;
	var nomImg = 'li';
	var ext = '.jpg';
	$R(0, 2).each(	function(ligne) {
		$R(0, 3).each(	function(col) {
			imgsFond[i] = new Image();
			imgsFond[i].src = cheminImgs + nomImg + ligne + col + ext;
			i++;
		});
	});
	var nbImgsFond = imgsFond.length;
	var cptImgsFond = 0;
	imgsFond.each(	function(ceFond) {
		Event.observe(ceFond, 'load', function() {
			cptImgsFond ++;
			$('prcent').update(Math.floor(100 * cptImgsFond / nbImgsFond) + ' %');
			if (cptImgsFond == 11) {
				$('voile_patience').style.display = 'none';
			}
		});
	});
});
var localites = new Array();
var comptRot;
var sensMvtLat = new Array();
var nbMvtLat = new Array();
sensMvtLat[0] = new Array('', 'N', 'S'); /*de lat0 vers lat1, rotation vers le N, de lat0 vers lat2, vers le sud... */
sensMvtLat[1] = new Array('S', '', 'S');
sensMvtLat[2] = new Array('N', 'N', '');
nbMvtLat[0] = new Array(0, 1, 1); /*de lat0 vers lat1, une rotation nécessaire, de lat0 vers lat2, une rotation nécessaire... */
nbMvtLat[1] = new Array(1, 0, 2);
nbMvtLat[2] = new Array(1, 2, 0);
Event.observe(window, 'load', function() {
	dimensionnerDivs();
});
