var tabsBandeauTrie = new Array();

function initListeTri(){
	var blocReponse= document.getElementById("N1_bloc_reponse");
	if(blocReponse){
		var listeBandeau = new Array();
		getElementsByClass("N2_bloc_reponse_liste",blocReponse, listeBandeau);
		for (i=0;i<listeBandeau.length;i++){
			var listeTriPub = initListeBlocTriPub(listeBandeau[i]);
			var listeTriDistance = sortListe(listeTriPub,compareBlocForTriDistance);
			tableauTriDistantePub = new Array();
			tableauTriDistantePub[0]=listeTriPub;
			tableauTriDistantePub[1]=listeTriDistance;
			tabsBandeauTrie[i]=tableauTriDistantePub;
		}
		
	}
}

function initListeBlocTriPub(noeudParent){
	var listeNoeud = new Array();
	getElementsByClass("N2_bloc_parution",noeudParent, listeNoeud);
	var listeBloc = new Array();
	for (var i = 0; i < listeNoeud.length; i++) {
		var noeud = listeNoeud[i];
		var bloc = new Object();
		bloc.refListe=noeud;
		var divNumero;
		if(getFirstElementByClass("N5_bloc_parution_index", noeud)){
			//pastilles jaunes
			divNumero=getFirstElementByClass("N5_bloc_parution_index", noeud);
		}else{
			//pastilles grises
			divNumero=getFirstElementByClass("N5_bloc_parution_index_gris", noeud);
		}
		bloc.id=trim(divNumero.childNodes[0].firstChild.nodeValue);
		bloc.numero=bloc.id;
		var distance = getFirstElementByClass("N5_bloc_parution_distance", noeud);
		if(distance){
		
			bloc.distance=getDistanceByLibelle(distance.childNodes[1].firstChild.nodeValue);
		}
		listeBloc[i]=bloc;
	}
	return listeBloc;
}

function triListePub(){
	for (i = 0; i < tabsBandeauTrie.length; i++) {
		var bandeau = tabsBandeauTrie[i];
		invertListeReponse(bandeau[1], bandeau[0]);
	}
	
}

function triListeDistance(){
	for (i = 0; i < tabsBandeauTrie.length; i++) {
		var bandeau = tabsBandeauTrie[i];
		invertListeReponse(bandeau[0], bandeau[1]);
	}
}

// ******************************* FONCTION DE COMPARAISON DES BLOCS ***************************************** //

// retour = 1 si le bloc1 doit etre affiché avant le bloc 2, -1 si le bloc1 doit etre affiché après le bloc 2, 
// 0 si on ne change pas l'ordre
function compareBlocForTriDistance(bloc1, bloc2){
	// Pertimm tri les bloc par distance, il suffit donc de trier les bloc selon le num de pastille (id)
	return testDistance(bloc1.id, bloc2.id);
}

//calcul de la distance en metre
function getDistanceByLibelle(distance){
	if(distance!=null){
		//récupération de l'index des km, s'il est différent de -1 alors la distance est 
		//en kilomètre et on multiplie le chiffre par 1000 pour l'avoir en metre
		//si l'index des km est égale à -1, la distance est en mètre, on retourne le chiffre
		var indexKm = distance.indexOf("km");
		if(indexKm==-1){
			indexKm = distance.indexOf("m");
			distance=distance.substring(0,indexKm).replace(',','.');
		}else{
			distance=distance.substring(0,indexKm);	
			if(distance==""){
				distance=0;
			}
			distance=distance.replace(',','.');
			distance=distance*1000;
		}
	}
	return distance;

}
//retourne -1 si distance1 < distance2, 1 si distance1 > distance2 et 0 si elles sont egales
function testDistance(distance1,distance2) {
	distance1 = parseFloat(distance1);
	distance2 = parseFloat(distance2);
	var retour = 1;
    if (distance1 < distance2) {
        retour = -1;
    } else if (distance1 == distance2) {
        retour = 0;
    }
    return retour;
}


function invertListeReponse(_oldArray, _newArray) {
	// Note : chaque element de l'ancienne liste doit exister dans la nouvelle
	var spanArray = new Array();
	// Creation de noeud d'accroche, retrait ancien noeud
	for (var i = 0; i < _oldArray.length; i++) {
		var ancienNoeud = _oldArray[i].refListe;
		var newSpan = document.createElement('span');
		spanArray[i] = newSpan;
		ancienNoeud.parentNode.insertBefore(newSpan, ancienNoeud);
		ancienNoeud.parentNode.removeChild(ancienNoeud);
	}
	// Ajout nouveau noeud, retrait noeud d'accroche
	for (var i = 0; i < _newArray.length; i++) {
		var nouveauNoeud = _newArray[i].refListe;
		spanArray[i].parentNode.insertBefore(nouveauNoeud, spanArray[i]);
		spanArray[i].parentNode.removeChild(spanArray[i]);
	}
}

