/**
 * Ce fichier va contenir les fonctions nécessaires au bon fonctionnement de l'éditeur de page.
 * @see editeur.tpl.php
 */

/**
 * Pour la liste déroulante des images. On insere le nom selectionné dans le textarea d'édition.
 */
function insertion_liste(liste, chaineAvant, chaineApres, nom_formulaire, nom_textarea) {
	i = liste.selectedIndex;
	if (i == 0) return;
	chainedeb = liste.options[i].value;

	if (chaineAvant) {
		chainedeb = chaineAvant + chainedeb;
	}
	if (chaineApres) {
		chainedeb = chainedeb + chaineApres;
	}
	if (!nom_formulaire) {
		nom_formulaire = 'editPage';
	}
	if (!nom_textarea) {
		nom_textarea = 'contenu';
	}
	insertion(chainedeb, '', nom_formulaire, nom_textarea);
}

/**
 * Pour les boutons d'insertion. Insere le texte repdeb et repfin au début et a 
 * la fin du texte séléctionné.
 * @param string repdeb : la balise de debut que l'on veut inserer.
 * @param string repfin : la balise de fin que l'on veut inserer.
 * @param string nom_textarea : facultatif, vide par defaut, nom du textarea dans lequel
 * on veut inserer les balises. L'insertion se fait en fonction du texte qui est actuellelement
 * selectionne.
 */
function insertion(repdeb, repfin, nom_formulaire, nom_textarea) {
	if (!nom_formulaire) {
		nom_formulaire = 'editPage';
	}
	if (!nom_textarea) {
		nom_textarea = 'contenu';
	} 
	
	var input = document.forms[nom_formulaire].elements[nom_textarea];
	input.focus();
	/* pour l'Explorer Internet	*/
	if (typeof document.selection != 'undefined') {
		/* Insertion du code de formatage */
		var range = document.selection.createRange();
		var insText = range.text;
		range.text = repdeb + insText + repfin;
		/* Ajustement de la position du curseur	*/
		range = document.selection.createRange();
		if (insText.length == 0) {
			range.move('character', -repfin.length);
		} else {
			range.moveStart('character', repdeb.length + insText.length + repfin.length);
		}
		range.select();
	}
	/* pour navigateurs plus récents basés sur Gecko */
	else if(typeof input.selectionStart != 'undefined')
	{
		/* Insertion du code de formatage	*/
		var start = input.selectionStart;
		var end = input.selectionEnd;
		var insText = input.value.substring(start, end);
		input.value = input.value.substr(0, start) + repdeb + insText + repfin + input.value.substr(end);
		/* Ajustement de la position du curseur	*/
		var pos;
		if (insText.length == 0) {
			pos = start + repdeb.length;
		} else {
			pos = start + repdeb.length + insText.length + repfin.length;
		}
		input.selectionStart = pos;
		input.selectionEnd = pos;
	}
	/* pour les autres navigateurs	*/
	else
	{
		/* requête de la position d'insertion	*/
		var pos;
		var re = new RegExp('^[0-9]{0,3}$');
		while(!re.test(pos)) {
			pos = prompt("Insertion à la position (0.." + input.value.length + "):", "0");
		}
		if(pos > input.value.length) {
			pos = input.value.length;
		}
		/* Insertion du code de formatage	*/
		var insText = prompt("Veuillez entrer le texte à formater:");
		input.value = input.value.substr(0, pos) + repdeb + insText + repfin + input.value.substr(pos);
	}
}

/**
 * Comme la fonction précédente, mais avec un parametre de décalage en plus qui permet de positionner le curseur
 * ou on le souhaite par rapport a la fin de la premiere balise.
 */
function insertion_dec(repdeb, repfin, decalage, nom_formulaire, nom_textarea) {
	if (!nom_formulaire) {
		nom_formulaire = 'editPage';
	}
	if (!nom_textarea) {
		nom_textarea = 'contenu';
	}
	var input = document.forms[nom_formulaire].elements[nom_textarea];
	input.focus();
	/* pour l'Explorer Internet	*/
	if(typeof document.selection != 'undefined') {
		/* Insertion du code de formatage */
		var range = document.selection.createRange();
		var insText = range.text;
		range.text = repdeb + insText + repfin;
		/* Ajustement de la position du curseur	*/
		range = document.selection.createRange();
		if (insText.length == 0) {
			range.move('character', -repfin.length + decalage);
		} else {
			range.move('character', repdeb.length + decalage);
		}
		range.select();
	}
	/* pour navigateurs plus récents basés sur Gecko */
	else if(typeof input.selectionStart != 'undefined')
	{
		/* Insertion du code de formatage	*/
		var start = input.selectionStart;
		var end = input.selectionEnd;
		var insText = input.value.substring(start, end);
		input.value = input.value.substr(0, start) + repdeb + insText + repfin + input.value.substr(end);
		/* Ajustement de la position du curseur	*/
		var pos;
		if (insText.length == 0) {
			pos = start + repdeb.length;
		} else {
			pos = start + repdeb.length + insText.length + repfin.length;
		}
		input.selectionStart = pos;
		input.selectionEnd = pos;
	}
	/* pour les autres navigateurs	*/
	else
	{
		/* requête de la position d'insertion	*/
		var pos;
		var re = new RegExp('^[0-9]{0,3}$');
		while(!re.test(pos)) {
			pos = prompt("Insertion à la position (0.." + input.value.length + "):", "0");
		}
		if(pos > input.value.length) {
			pos = input.value.length;
		}
		/* Insertion du code de formatage	*/
		var insText = prompt("Veuillez entrer le texte à formater:");
		input.value = input.value.substr(0, pos) + repdeb + insText + repfin + input.value.substr(pos);
	} 
}	



