// AddLoadHandler
// Ajoute une fonction au chargement de la page.
function addLoadHandler(handler) {

	if(window.addEventListener) {
		window.addEventListener("load",handler,false);
	} else if(window.attachEvent) {
		window.attachEvent("onload",handler);
	} else if(window.onload) {
		var oldHandler = window.onload;
		window.onload = function piggyback() {
			oldHandler();
			handler();
		};
	} else {
		window.onload = handler;
	}
}

// Réécrit une adresse passée en argument pour remplacer un paramètre
function setParametre(p_adresse, p_variable, p_position_parametre, p_parametre) {
	if(!(p_variable == 'parametre' || p_variable == 'action')) return false;

	if(p_adresse.lastIndexOf(p_variable) != -1) {
		var debut_parametre = p_adresse.lastIndexOf(p_variable);
		var debut_adresse = p_adresse.substring(0, (debut_parametre+p_variable.length+1));
		var param = p_adresse.substring((debut_parametre+p_variable.length+1));
		var fin_adresse = '';

		if(fin_adresse.lastIndexOf('&') != -1) {
			var fin_parametre = param.lastIndexOf('&')
			fin_adresse = param.substring(fin_parametre);
			param = param.substring(0, fin_parametre+1);
		}

		var params = param.split(';');
	} else {
		if(p_adresse.lastIndexOf('?') == -1) {
			var debut_adresse = p_adresse+'?';
		} else {
			var debut_adresse = padresse+'&';
		}
		debut_adresse += p_variable+'=';
		var fin_adresse = '';
		var params = [0, 0, 0, 0];
	}
	// Remplacement du paramètre
	params[p_position_parametre] = p_parametre;

	// Reconstruction de la chaine
	var neo_parametre = params.join(';');
	p_adresse = debut_adresse + neo_parametre + fin_adresse;

	return p_adresse;
}

// Rw_link
// Fonction de réécriture des liens.
function rw_link(selection, lien) {
	// Récupération de l'id à insérer, de l'adresse à modifier
	var id=document.getElementById(selection).value;
	var adresse=document.getElementById(lien).href;

	adresse=setParametre(adresse, 'action', 1, id);

	document.getElementById(lien).href=adresse;
}

// Rw_action
// Fonction de réécriture des actions.
function rw_action(selection, formulaire) {
	// Récupération de l'id à insérer, de l'adresse à modifier
	var id=document.getElementById(selection).value;
	var adresse=document.getElementById(formulaire).action;

	adresse=setParametre(adresse, 'action', 1, id);

	document.getElementById(formulaire).action=adresse;
}

// Rw_adresse
// Fonction de réécriture des paramètres de la page.
function rw_adresse(selection, formulaire, parametre) {
	// Récupération de l'id à insérer, de l'adresse à modifier
	var id=document.getElementById(selection).value;
	var adresse=document.getElementById(formulaire).action;

	adresse=setParametre(adresse, 'parametre', parametre, id);

	document.getElementById(formulaire).action=adresse;
}

// Confirmation_action
// Affiche une boite de dialogue demandant la confirmation de l'action demandée.
function confirmation() {
	if(confirm(index_traduction["general__etes_vous_sur"])) {
		return true;
	}
	return false;
}

// ClearContent
// Vide le contenu d'un objet HTML passé en paramètre
function clearContent(obj_element, p_end) {
	// pour FFX
	for(var i=obj_element.childNodes.length-1; i >= p_end; i--) {
		obj_element.removeChild(obj_element.childNodes[i]);
		//obj_element.removeChild(obj_element.lastChild);
	}
}

// format_size
// Formatte une taille.
function format_size(p_size) {
	var listeUnit=new Array('', 'K', 'M', 'G', 'T');

	for(var i=1; i<listeUnit.length; i++) {
		if((p_size/1024)>1) {
			p_size=parseFloat(p_size/1024);
		} else {
			var int_size=parseInt(p_size);
			var dec_size=Math.round((p_size-int_size)*100);

			return int_size+','+dec_size+' '+listeUnit[i-1];
		}
	}
}

// Trim
// Equivalent de la fonction PHP du même nom
function trim(chaine) {
	//regex qui supprime les espaces retour chariot ... au debut et a la fin de la chaine
	return chaine.replace(/(^\s*)|(\s*$)/g,'');
}

// SupprQuote
// Supprime les doubles quotes en début et en fin de chaine
function supprQuote(chaine) {
	return chaine.replace(/(^"*)|("*$)/g,'');
}

// AddTextNode
// Ajoute un noeud texte
function addTextNode(cible, chaine, type, cibleReplace) {
	var objChaine = document.createTextNode(chaine);
	if(type=="add") {
		cible.appendChild(objChaine);
	} else {
		cible.replaceChild(objChaine, cibleReplace);
	}
}

// GenerateDOMContent
// Génère via DOM un équivalent au code HTML passé en paramètre et l'insère à l'endroit indiqué.
// cible			: Objet HTML dans lequel on souhaite afficher chaine
// chaine			: La chaine a traiter
// type				: Ajout ou remplacement de données
// cible replace 	: Element remplacé dans le cas d'un remplacement.
function generateDOMContent(cible, chaine, type, cibleReplace) {
	// Si la chaine n'existe on ne fait rien
	if (chaine.length == 0) return'';

	// On récupère la position de la première balise de la chaine
	var debutBalise = chaine.indexOf('<');

	// Si la chaine commande par une balise
	if(debutBalise == 0) {

		// Détection des fins de balises possibles
		var finBalise = chaine.indexOf('>');
		var finBaliseAutoFermante = chaine.indexOf('/>');

		// S'il s'agit d'une balise autofermante
		if(finBaliseAutoFermante == finBalise-1) {
			// Récupération du contenu de la balise
			var balise = trim(chaine.substring(1, finBaliseAutoFermante));

			var attribut=Array();
			// Détection et récupération des attributs.
			if(balise.indexOf('=')!=-1) {
				var baliseTemp = balise.substring(balise.indexOf(' '), balise.length);
				var attribut = baliseTemp.split('=\"');
			}

			// Récupération du nom de la balise
			if(balise.indexOf(' ')!=-1) {
				var balise = balise.substring(0,balise.indexOf(' '));
			}

			// Création de l'objet DOM pour la nouvelle balise.
			var baliseCree = document.createElement(balise);

			// On raccourci la chaine avant de relancer le processus
			chaine = chaine.substring(finBalise+1, chaine.length);

		// S'il s'agit d'une balise double.
		} else {
			// Récupération de la balise
			var balise = chaine.substring(1,finBalise);


			var attribut=Array();
			// Détection et récupération des attributs.
			if(balise.indexOf('=')!=-1) {
				var baliseTemp = balise.substring(balise.indexOf(' '), balise.length);
				var attribut = baliseTemp.split('=\"');
			}

			// Récupération du nom de la balise
			if(balise.indexOf(' ')!=-1) {
				var balise = balise.substring(0, balise.indexOf(' '));
			}

			// Raccourcissement de la chaine avant suite de la procédure.
			chaine = chaine.substring(finBalise+1, chaine.length);

			// Extraction du contenu de la balise
			var contenuBalise = chaine.substring(0,chaine.indexOf('</'+balise));

			// Création de l'objet DOM pour la nouvelle balise
			var baliseCree = document.createElement(balise);

			// Si la balise n'est pas vide, on relance le processus sur son contenu
			if(contenuBalise != '') {
				generateDOMContent(baliseCree, contenuBalise, 'add', null);
			}

			// Raccourcissement de la chaine avant relance de la procédure
			chaine = chaine.substring(chaine.indexOf('</'+balise)+3+balise.length, chaine.length);
		}

		// Gestion des attributs
		for(i=0;i<attribut.length;i++) {

			if(attribut[i+1]) {
				attribut[i+1]='\"'+attribut[i+1];

				// Récupération de l'attribut
				var attrTemp=trim(attribut[i].substring(attribut[i].indexOf(' '), attribut[i].length));

				// Récupération de la valeur de l'attribut
				attribut[i+1]=attribut[i+1].substring(1, attribut[i+1].length);
				var valeurAttrTemp=trim(attribut[i+1].substring(0, attribut[i+1].indexOf('"')));
				var tmp=attribut[i+1].substring(valeurAttrTemp.length+2, attribut[i+1].length);

				// Fonctionnement spécifique pour IE
				if(document.all) {
					if(attrTemp=='class') {
						baliseCree.setAttribute(attrTemp+'Name', valeurAttrTemp);
					} else if(attrTemp.substring(0,2)=='on') {
						eval('baliseCree.'+attrTemp+' = function() {'+valeurAttrTemp+'};');
					} else {
						baliseCree.setAttribute(attrTemp, valeurAttrTemp);
					}
				} else {
					baliseCree.setAttribute(attrTemp, valeurAttrTemp);
				}

				// Si l'attribut i+1 restant n'est pas vide on le préfixe de "_  ",
				// afin de pouvoir le récupérer à la prochaine itération malgré l'utilisation de trim.
				if (tmp!='') attribut[i+1]="_ "+tmp;
			}
		}

		if (type=="add") {
			cible.appendChild(baliseCree);
		} else {
			cible.replaceChild(baliseCree,cibleReplace);
		}

		// On relance la procédure sur la chaine restante.
		if(chaine != '') {
			generateDOMContent(cible, chaine, 'add', null);
		}

	// Si une balise existe mais qu'elle n'est pas au début de la chaine
	} else if(debutBalise>0) {
		// Isolation de la portion de chaine avant la première balise.
		debutChaine = chaine.substring(0, debutBalise);
		// Insertion du texte
		addTextNode(cible, debutChaine, type, cibleReplace);
		// On raccourci la chaine et on relance le processus
		chaine = chaine.substring(debutBalise, chaine.length);

		if(chaine != '') {
			generateDOMContent(cible, chaine, 'add', null);
		}

	// Si on a aucune balise
	} else if(debutBalise==-1) {
		// Insertion du texte
		addTextNode(cible, chaine, type, cibleReplace);
	}
}