/************************
17/04/2006 11:39 Fladnag
************************/

/***** DEBUG *******/
var debugWin;
function debug(message) {
	if ((debugWin === undefined) || (debugWin === null) || (debugWin.document === null) || (debugWin.document === undefined)) {
		debugWin = open('', 'debugWin', 'width=500, height=400, left=0, top=0, resizable=yes, scrollbars=yes');
	}
	if ((debugWin === undefined) || (debugWin === null) || (debugWin.document === null) || (debugWin.document === undefined)) {
		alert("Impossible d'ouvrir une nouvelle fenetre. Verifiez les parametres de votre navigateur");
	}
	debugWin.document.writeln(message + '<br>');
}

function dump(object, decal) {
	if (decal === undefined) {
		debug('<hr>');
		decal = '';
	}

	for(prop in object) {
		try {
			debug(decal + object + '.'+prop+' = '+object[prop]);
			if ((decal === '') && ((object[prop] instanceof Array) || (object[prop] instanceof Object) || (object[prop]=='[object]'))) {
				dump(object[prop], decal + '&nbsp;&nbsp;&nbsp;&nbsp;');
			}
		}
		catch (e) { 
			debug('[ERROR]'+object + '.' + prop + ' cannot be dump');
			// do nothing
		}
	}
}
/***** END DEBUG *******/

function style(parent, params) {
	if (!params) {
		return this;
	}

	for(prop in params) {
		this[prop] = params[prop];
	}

	if (this.valeurs !== undefined) {
		var defaut;
		for(prop in this.valeurs) {
			defaut = prop;
			break;
		}
		this.defaut=defaut;
	}

	this.parent=parent;

	if (this.monobalise) {
		this.debut='['+this.BBCode+'/]';
		this.fin='';
	}
	else {
		this.debut='['+this.BBCode+']';
		this.fin='[/'+this.BBCode+']';
	}
	this.ferme=true;
	switch(this.type) {
		case 'select':
			parent.onchange = process;
		break;
		case 'info':
			// nothing
		break;
		default :
			parent.onclick = process;
	}
	parent.onmouseover = styleShowHelp;
	this.getNextBalise = styleNext;
	this.getDebut = styleDebut;
	this.getFin = styleFin;
	this.endProcess = styleEndProcess;
	this.construct = styleConstruct;
	var aContent = this.content;
	if (typeof aContent == 'object') {
		aContent = aContent[1];
	}
	if (this.type != 'info') {
		if (!this.monobalise) {
			this.aide = '<b>' + this.getDebut(true) + '</b>'+aContent+'<b>' + this.getFin() + '</b> : ' + this.aide
		}
		else {
			this.aide = '<b>' + this.getDebut(true) + '</b> : ' + this.aide
		}
	}
	this.aide = 'Aide : '+this.aide;
	if ((this.image !== undefined) && (this.image != '')) {
		parent.style.backgroundColor = "#D6D7CE";
		parent.style.backgroundImage = "url('"+chemin+"editorCommon/img/"+this.image+"')";
		parent.style.backgroundRepeat = "no-repeat";
		parent.style.backgroundPosition = "center";
		parent.style.width="30px";
		parent.style.height="30px";
		parent.value='';
	}

	parent.style.marginLeft="3px";
	parent.style.marginBottom="3px";

	if (!this.simple) {
		parent.style.display = "none";
	}
}

function foundDivTooltip(parent) {
	if (parent.divTooltip == null) {
		var listeNoeudsEnfants = parent.childNodes;
		var aDivTooltip = null;
		for(i=0;i < listeNoeudsEnfants.length; i++) {
			if (listeNoeudsEnfants[i].className == 'editorTooltip') {
				aDivTooltip = listeNoeudsEnfants[i];
				break;
			}
		}
		parent.divTooltip = aDivTooltip;
	}
	return parent.divTooltip;
}

function hideTooltipDelayed(e) {
	try { e=event; } catch(ex) {} // pour IE

	var aDivTooltip = foundDivTooltip(this);
	if (aDivTooltip !== null) {
		var aTimeout = window.setTimeout("hideTooltip(\'"+aDivTooltip.parentNode.id+"\')", 300);
		aDivTooltip.currentTimeout = aTimeout;
	}
}

function hideTooltip(idDiv) {
	try { e=event; } catch(ex) {} // pour IE

	var aDivTooltip = foundDivTooltip(document.getElementById(idDiv));

	aDivTooltip.style.display="none";
	aDivTooltip.currentTimeout = null;
}

function showTooltip(e) {
	try { e=event; } catch(ex) {} // pour IE
	
	var aDivTooltip = foundDivTooltip(this);
	
	if ((aDivTooltip !== null) && (aDivTooltip.currentTimeout !== null)) {
		window.clearTimeout(aDivTooltip.currentTimeout);
		aDivTooltip.currentTimeout = null;
	}

	if ((aDivTooltip !== null) && (aDivTooltip.style.display == "none")) {
		aDivTooltip.style.left = e.clientX;
		aDivTooltip.style.display="block";

		aDivTooltip.style.top=(aDivTooltip.parentNode.offsetTop + aDivTooltip.parentNode.offsetHeight);

		var nb = 0;
		aDivTooltip.style.width = aDivTooltip.clientWidth;
		while((aDivTooltip.clientHeight / aDivTooltip.clientWidth) < 0.4) {
			nb++;
			aDivTooltip.style.width = parseInt(aDivTooltip.style.width) - 3;
			if (nb > 500) {
				aDivTooltip.style.width = aDivTooltip.clientWidth;
				break;
			}
		}
		while((aDivTooltip.clientHeight / aDivTooltip.clientWidth) > 0.6) {
			nb++;
			aDivTooltip.style.width = parseInt(aDivTooltip.style.width) + 3;
			if (nb > 500) {
				aDivTooltip.style.width = aDivTooltip.clientWidth;
				break;
			}
		}

		if (aDivTooltip.style.left < 0) {
			aDivTooltip.style.left = 0;
		}

		if (aDivTooltip.clientWidth + aDivTooltip.offsetLeft > document.body.clientWidth - 20) {
			aDivTooltip.style.left = document.body.clientWidth - aDivTooltip.clientWidth - 20;
		}
		if (aDivTooltip.clientHeight + aDivTooltip.offsetTop - document.body.scrollTop> document.body.clientHeight) {
			aDivTooltip.style.top = aDivTooltip.parentNode.offsetTop - aDivTooltip.clientHeight;
		}
	}
}
/**
function showTooltip(e) {
	try { e=event; } catch(ex) {} // pour IE

	var aDivTooltip = foundDivTooltip(this);

	if (aDivTooltip !== null) {
		var x = e.clientX + document.body.scrollLeft;
		var y = e.clientY + document.body.scrollTop;
		aDivTooltip.style.top=y + 10;
		aDivTooltip.style.left=x - 50;

		//aDivTooltip.style.minWidth=400;

//dump(aDivTooltip);

//		while(aDivTooltip.style.height > 300) {
//			aDivTooltip.style.left+=10;
//		}

		aDivTooltip.style.display="block";
	}
}
**/

function styleShowHelp(e) {
	try { e=event; } catch(ex) {} // pour IE
	
	var editor = this.editor;
	var aHelpDiv = document.getElementById('editorHelp');
	aHelpDiv.innerHTML = editor.aide;
}

function styleNext(value) {
	var aNextBalise = this.getFin();

	if ((this.type=='select')|| this.monobalise) {
		var aDebut = this.getDebut(false, value);
		if (aDebut != '') {
			aNextBalise = aDebut + aNextBalise;
		}
		else {
			aNextBalise = '';
		}
	}
	else {
		if (this.ferme) {
			aNextBalise = this.getDebut(false, value);
			this.parent.style.borderColor='#FF0000';
			this.parent.style.borderStyle='dashed';
			this.parent.style.borderWidth=2;
		} else {
			this.parent.style.borderColor='';
			this.parent.style.borderStyle='';
			this.parent.style.borderWidth='';
		}
		this.ferme = !this.ferme;
	}
	return aNextBalise;
}

function styleDebut(force, valeur) {

	var aFin = (this.monobalise)?'/':'';
	
	if (this.type=='select') {
		var aValue = this.parent.value;
		if (force) {
			aValue = this.defaut;
		}
		if (force || (aValue != this.defaut)) {
			return '['+this.BBCode+'='+aValue+aFin+']';
		}
	}
	else {
		if ((valeur !== undefined)&&(valeur !== '')) {
			return '['+this.BBCode+'='+valeur+aFin+']';
		}
		else if (this.defaut !== undefined) {
			return '['+this.BBCode+'='+this.defaut+aFin+']';
		}
		else {
			return this.debut;
		}
	}
	return '';
}

function styleFin() {
	return this.fin;
}

function styleEndProcess() {
	if (this.type=='select') {
		this.parent.value=this.defaut;
	}
}

function styleConstruct(texte) {
	var aTexte;

	var aInputHelpText = undefined;
	var aInputText = undefined;
	var forceClose = false;
	if (this.ferme) {

		if (this.bypassAskValue !== undefined) {
			aInputText = this.bypassAskValue['value'];
			texte = this.bypassAskValue['content'];
			forceClose = true;
			this.bypassAskValue = undefined;
		}

		if ((typeof this.value === 'object') 
			&& (aInputText === undefined)) {
			aInputHelpText = this.value[0];
			aInputText = this.value[1];
			aInputText = prompt(aInputHelpText, aInputText);
			if (aInputText === null) {
				aInputText = '';
			}
		}
		
		if ((typeof this.content === 'object') 
			&& ((texte === undefined) || (texte === ''))) {
			aInputHelpTextContent = this.content[0];
			aInputTextContent = this.content[1];
			aInputTextContent = prompt(aInputHelpTextContent, aInputTextContent);
			if (aInputTextContent === null) {
				aInputTextContent = '';
			}
			texte = aInputTextContent;
		}
	}
	if (((texte !== undefined) && (texte !== '')) || forceClose) {
		aTexte = this.getDebut(false, aInputText) + texte + this.getFin()
	}
	else {
		aTexte = this.getNextBalise(aInputText);
	}
	return aTexte;
}

function listeUpload(parent) {
	this.parent = parent;
	this.liste=[];
	this.getNewUpload = uploadNew;

	this.currentNumber = 0;
	var aText = document.createTextNode("Ajouter une image : ");
	this.parent.appendChild(aText);

	this.current= this.getNewUpload(this);
	//this.current.onclick = uploadAdd;
	this.parent.appendChild(this.current);

	this.getPickupLink = uploadPickupLink;
	this.getPickupLink(this.parent);
	this.parent.appendChild(this.parent.pickupLink);
}

function menuSwapMode() {
	var aListeButton = document.getElementsByName('editorButton');

	var mode = 0;
	for (var i=0; i<aListeButton.length; i++) {
		var e = aListeButton[i].editor;
		if (!e.simple) {
			var temp = e.parent.style.display;
			if (temp === "none") {
				e.parent.style.display = "";
				mode = 1;
			} else {
				e.parent.style.display = "none";
			}
		}
	}

	var aSwapLink = document.getElementById('editorMenuMode');
	if (mode == 0) {
		aSwapLink.innerHTML = "plus d\'options";
	} else {
		aSwapLink.innerHTML = "moins d\'options";
	}

	var aMenuModeInput = document.getElementById('editorMenuModeValue');
	aMenuModeInput.value = mode;
}

function uploadPickupLink(parent) {
	var aPickupLink = document.createElement('a');
	aPickupLink.setAttribute('id', 'editorPickupLink');
	var aLinkTexte = document.createTextNode(' Selectionner une image existante');
	aPickupLink.appendChild(aLinkTexte);

	parent.pickupLink = aPickupLink;
	return;
}

function uploadNew(parent) {
	this.currentNumber++;
	var aInput = document.createElement('input');
	aInput.setAttribute('type','file');
	aInput.setAttribute('name', '');
	aInput.setAttribute('class', 'editorMenuButton');

	var editor = new style(aInput, { type: 'info', BBCode: 'uploadSelect', nom: 'uploadSelect', texte: 'Browse', aide: 'Sélectionne une image sur le disque', content: '', monobalise: '1', value: null});
	aInput.editor = editor;
	aInput.parent = parent;
	aInput.onchange = uploadAdd;

	return aInput;
}

function uploadAddHidden(upload, num, filename) {
	var aHiddenFile = document.createElement('input');
	aHiddenFile.setAttribute('type', 'hidden');
	aHiddenFile.setAttribute('name', 'editorUpload['+num+']');
	aHiddenFile.setAttribute('value', filename);

	upload.parent.appendChild(aHiddenFile);
	if (upload.listePostUpload == undefined) {
		upload.listePostUpload = [];
	}
	upload.listePostUpload[num] = aHiddenFile;
}

function uploadAddNew(upload, num, filename) {
	var aDiv = document.createElement('div');
	aDiv.setAttribute('style', 'font-family:cursive');
	aDiv.setAttribute('id', 'editorUpload'+num);

	var aText = document.createTextNode("["+num+"] "+filename);

	var aAttachButton = document.createElement('input');
	aAttachButton.setAttribute('type', 'button');
	aAttachButton.setAttribute('name', 'editorButton');
	aAttachButton.className = 'editorMenuButton';
	aAttachButton.listeUpload = upload;
	aAttachButton.listeUploadIndex = num;
	var aTab = { type: 'button', BBCode: 'upload', nom: 'upload', texte: 'UPLOAD', aide: 'Insère l\'image selectionnée', content: '', monobalise: '1', image: 'attach.png'};
	aTab.valeurs=[];
	aTab.valeurs[num]='';
	var editor = new style(aAttachButton, aTab);
	aAttachButton.editor = editor;

	var aDeleteButton = document.createElement('input');
	aDeleteButton.setAttribute('type', 'button');
	aDeleteButton.setAttribute('name', 'editorButton');
	aDeleteButton.className = 'editorMenuButton';
	aDeleteButton.listeUpload = upload;
	aDeleteButton.listeUploadIndex = num;
	aDeleteButton.parent = aDiv;
	var editor = new style(aDeleteButton, { type: 'info', BBCode: 'delete', nom: 'delete', texte: 'DEL', aide: 'Supprime l\'image selectionnée', content: '', monobalise: '1', value: null, image: 'supprattach.png'});
	aDeleteButton.editor = editor;
	aDeleteButton.onclick = uploadDelete;

	aDiv.appendChild(aText);
	aDiv.appendChild(document.createTextNode(' '));
	aDiv.appendChild(aAttachButton);
	aDiv.appendChild(document.createTextNode(' '));
	aDiv.appendChild(aDeleteButton);

	//var current = upload.current;
	//upload.current= upload.getNewUpload(upload);
	//upload.parent.insertBefore(upload.current, current);

	upload.parent.appendChild(aDiv);
}

function uploadAdd(e) {
	try { e=event; } catch(ex) {} // pour IE

	var upload=this.parent;
	var current = upload.current;

	if ((current.value !== null) 
		&& (current.value !== undefined) 
		&& (current.value != '')) {

		upload.liste[upload.currentNumber]=current;
		current.name='editorUpload['+upload.currentNumber+']';
		current.style.display='none';

		var aTextValue;
		if (current.value.split("/").lenght > current.value.split("\\").lenght) {
			aTextValue = current.value.substr(current.value.lastIndexOf("/")+1);
		}
		else {
			aTextValue = current.value.substr(current.value.lastIndexOf("\\")+1);
		}

		uploadAddNew(upload, upload.currentNumber, aTextValue);

		var current = upload.current;
		upload.current= upload.getNewUpload(upload);
		upload.parent.insertBefore(upload.current, current);
	}
}

function uploadDelete(e) {
	try { e=event; } catch(ex) {} // pour IE
	
	var oldInput = this.listeUpload.liste[this.listeUploadIndex];
	if (oldInput !== undefined) {
		oldInput.value='';
		oldInput.name='';
		this.listeUpload.liste[this.listeUploadIndex] = '';
	}
	if ((this.listeUpload.listePostUpload !== undefined)
			&& (this.listeUpload.listePostUpload[this.listeUploadIndex] !== undefined)) {
		this.listeUpload.listePostUpload[this.listeUploadIndex].name='';
	}
	this.parent.style.display='none';
}

function initDisplay() {
	//var aListeTooltip = document.getElementsByName('defTooltip'); // marche pas sous IE...
	var aListeTooltip = document.getElementsByTagName('span');

	for (var i=0; i<aListeTooltip.length; i++) {
		try {
			var aName = aListeTooltip[i].getAttribute('id');
			if (aName.indexOf('defTooltip')==0) {
				aListeTooltip[i].onmouseover=showTooltip;
				//aListeTooltip[i].onmousemove=showTooltip;
				aListeTooltip[i].onmouseout=hideTooltipDelayed;
			}
		} catch (e) {}
	}
}

function initEditor() {
	var aHelpDiv = document.getElementById('editorHelp');
	if (aHelpDiv === null) {
		return;
	}
	aHelpDiv.style.display="inline";
	var aList = document.getElementsByName('editorButton');
	for (var i = 0; i<aList.length; i++) {
		var eachElement = aList[i];
		switch(eachElement.id) {
			case 'editorfont-color' :
			eachElement.editor = new style(eachElement, { type: 'select', BBCode: 'font', nom: 'font-color', texte: 'Couleur', aide: 'Couleur du texte', valeurs: { 'couleur': '-- défaut --', 'red': 'Rouge', 'black': 'Noir', 'white': 'Blanc', 'silver': 'Argent', 'blue': 'Bleu', 'aqua': 'Bleu clair', 'navy': 'Bleu foncé', 'fuchsia': 'Fushia', 'gray': 'Gris', 'yellow': 'Jaune', 'maroon': 'Marron', 'olive': 'Olive', 'purple': 'Pourpre', 'teal': 'Turquoise', 'lime': 'Vert clair', 'green': 'Vert foncé'}, content: 'texte', monobalise: '', value: '', image: '', simple: '1'});
			break;
			case 'editorcenter' :
			eachElement.editor = new style(eachElement, { type: 'button', BBCode: 'center', nom: 'center', texte: 'C', aide: 'Centre un texte à l\'écran', valeurs: '', content: 'texte', monobalise: '', value: '', image: 'center.png', simple: '1'});
			break;
			case 'editorright' :
			eachElement.editor = new style(eachElement, { type: 'button', BBCode: 'right', nom: 'right', texte: 'R', aide: 'Aligne un texte à droite', valeurs: '', content: 'texte', monobalise: '', value: '', image: 'right.png', simple: '1'});
			break;
			case 'editortitre' :
			eachElement.editor = new style(eachElement, { type: 'button', BBCode: 'titre', nom: 'titre', texte: 'T', aide: 'Définit un titre', valeurs: '', content: 'texte', monobalise: '', value: '', image: 'titre.png', simple: '1'});
			break;
			case 'editorsstitre' :
			eachElement.editor = new style(eachElement, { type: 'button', BBCode: 'sstitre', nom: 'sstitre', texte: 'T', aide: 'Définit un sous-titre', valeurs: '', content: 'texte', monobalise: '', value: '', image: 'sstitre.png', simple: '1'});
			break;
			case 'editorbold' :
			eachElement.editor = new style(eachElement, { type: 'button', BBCode: 'b', nom: 'bold', texte: 'B', aide: 'Met en gras une portion de texte', valeurs: '', content: 'texte', monobalise: '', value: '', image: 'b.png', simple: '1'});
			break;
			case 'editoritalic' :
			eachElement.editor = new style(eachElement, { type: 'button', BBCode: 'i', nom: 'italic', texte: 'I', aide: 'Met en italique une portion de texte', valeurs: '', content: 'texte', monobalise: '', value: '', image: 'i.png', simple: '1'});
			break;
			case 'editorunderline' :
			eachElement.editor = new style(eachElement, { type: 'button', BBCode: 'u', nom: 'underline', texte: 'U', aide: 'Souligne une portion de texte', valeurs: '', content: 'texte', monobalise: '', value: '', image: 'u.png', simple: '1'});
			break;
			case 'editorspoiler' :
			eachElement.editor = new style(eachElement, { type: 'button', BBCode: 'spoiler', nom: 'spoiler', texte: 'Spoiler', aide: 'Affiche un texte noir sur fond noir dans un cadre spécial', valeurs: '', content: 'texte', monobalise: '', value: '', image: 'spoiler.png', simple: '1'});
			break;
			case 'editorquote' :
			eachElement.editor = new style(eachElement, { type: 'button', BBCode: 'quote', nom: 'quote', texte: '« »', aide: 'Indique qu\'un texte est une citation de <i>auteur</i>', valeurs: { 'auteur': ''}, content: 'citation', monobalise: '', value: '', image: 'quote.png', simple: '1'});
			break;
			case 'editorliste' :
			eachElement.editor = new style(eachElement, { type: 'button', BBCode: 'liste', nom: 'liste', texte: 'LISTE', aide: 'Créé une liste', valeurs: '', content: 'texte', monobalise: '', value: '', image: 'liste.png', simple: '1'});
			break;
			case 'editortexteMiseEnFormeSimple' :
			eachElement.editor = new style(eachElement, { type: 'info', BBCode: '<br>Mise en forme fine du texte :', nom: 'texteMiseEnFormeSimple', texte: '', aide: '', valeurs: '', content: '', monobalise: '', value: '', image: '', simple: ''});
			break;
			case 'editorbig' :
			eachElement.editor = new style(eachElement, { type: 'button', BBCode: 'big', nom: 'big', texte: 'A+', aide: 'Augmente la taille du texte', valeurs: '', content: 'texte', monobalise: '', value: '', image: 'big.png', simple: ''});
			break;
			case 'editorsmall' :
			eachElement.editor = new style(eachElement, { type: 'button', BBCode: 'small', nom: 'small', texte: 'A-', aide: 'Diminue la taille du texte', valeurs: '', content: 'texte', monobalise: '', value: '', image: 'small.png', simple: ''});
			break;
			case 'editorparagraphe' :
			eachElement.editor = new style(eachElement, { type: 'button', BBCode: 'p', nom: 'paragraphe', texte: 'P', aide: 'Définit une zone de texte composée de paragraphes avec alinéas', valeurs: '', content: 'texte', monobalise: '', value: '', image: 'p.png', simple: ''});
			break;
			case 'editorpsansalinea' :
			eachElement.editor = new style(eachElement, { type: 'button', BBCode: 'p', nom: 'psansalinea', texte: 'PSA', aide: 'Définit une zone de texte composée de paragraphes sans alinéas', valeurs: { 'noalinea': ''}, content: 'texte', monobalise: '', value: '', image: 'psa.png', simple: ''});
			break;
			case 'editorpmarge' :
			eachElement.editor = new style(eachElement, { type: 'button', BBCode: 'pmarge', nom: 'pmarge', texte: '-P', aide: 'Définit une zone de texte décalée de x% vers la droite', valeurs: { 'x%': ''}, content: 'texte', monobalise: '', value: '', image: 'pmarge.png', simple: ''});
			break;
			case 'editorstrike' :
			eachElement.editor = new style(eachElement, { type: 'button', BBCode: 's', nom: 'strike', texte: 'S', aide: 'Barre une portion de texte en la laissant visible', valeurs: '', content: 'texte', monobalise: '', value: '', image: 's.png', simple: ''});
			break;
			case 'editornbsp' :
			eachElement.editor = new style(eachElement, { type: 'button', BBCode: 'nbsp', nom: 'nbsp', texte: 'NBSP', aide: 'Ajoute un espace insécable', valeurs: '', content: 'texte', monobalise: '1', value: '', image: 'nbsp.png', simple: ''});
			break;
			case 'editortab' :
			eachElement.editor = new style(eachElement, { type: 'button', BBCode: 'tab', nom: 'tab', texte: 'TAB', aide: 'Insère une ou plusieurs tabulations', valeurs: { 'nombre': ''}, content: 'texte', monobalise: '1', value: { '0': 'Veuillez indiquer le nombre de tabulation a inserer', '1': '1'}, image: 'tab.png', simple: ''});
			break;
			case 'editornobr' :
			eachElement.editor = new style(eachElement, { type: 'button', BBCode: 'nobr', nom: 'nobr', texte: 'NOBR', aide: 'Indique que le texte entre les deux balises doit se trouver sur une seule ligne', valeurs: '', content: 'texte', monobalise: '', value: '', image: 'nobr.png', simple: ''});
			break;
			case 'editoropen' :
			eachElement.editor = new style(eachElement, { type: 'button', BBCode: 'open', nom: 'open', texte: '[', aide: 'Affiche un crochet ouvrant', valeurs: '', content: 'texte', monobalise: '1', value: '', image: 'open.png', simple: ''});
			break;
			case 'editorclose' :
			eachElement.editor = new style(eachElement, { type: 'button', BBCode: 'close', nom: 'close', texte: ']', aide: 'Affiche un crochet fermant', valeurs: '', content: 'texte', monobalise: '1', value: '', image: 'close.png', simple: ''});
			break;
			case 'editortexteMiseEnFormeSimple2' :
			eachElement.editor = new style(eachElement, { type: 'info', BBCode: '<br>Autres options :', nom: 'texteMiseEnFormeSimple2', texte: '', aide: '', valeurs: '', content: '', monobalise: '', value: '', image: '', simple: ''});
			break;
			case 'editorimg' :
			eachElement.editor = new style(eachElement, { type: 'button', BBCode: 'img', nom: 'img', texte: 'IMG', aide: 'Insere une image disponible sur internet', valeurs: { 'http://': ''}, content: 'texte de remplacement', monobalise: '', value: { '0': 'Veuillez indiquer le chemin de l\'image', '1': 'http://'}, image: 'image.png', simple: ''});
			break;
			case 'editorlink' :
			eachElement.editor = new style(eachElement, { type: 'button', BBCode: 'link', nom: 'link', texte: 'LINK', aide: 'Insere un lien', valeurs: { 'http://': ''}, content: { '0': 'Veuillez indiquer le texte du lien', '1': 'texte'}, monobalise: '', value: { '0': 'Veuillez indiquer le chemin du lien', '1': 'http://'}, image: 'link.png', simple: ''});
			break;
			case 'editorancre' :
			eachElement.editor = new style(eachElement, { type: 'button', BBCode: 'ancre', nom: 'ancre', texte: 'ANCRE', aide: 'Insere un repère pour un lien local', valeurs: { 'nom du repère': ''}, content: 'texte', monobalise: '1', value: { '0': 'Veuillez indiquer le nom du repère', '1': ''}, image: 'ancre.png', simple: ''});
			break;
			case 'editorlinkancre' :
			eachElement.editor = new style(eachElement, { type: 'button', BBCode: 'linkancre', nom: 'linkancre', texte: 'LINKANCRE', aide: 'Insere un lien vers un repère', valeurs: { 'nom du repère': ''}, content: { '0': 'Veuillez indiquer le texte du lien', '1': 'texte'}, monobalise: '', value: { '0': 'Veuillez indiquer le nom du repère', '1': ''}, image: 'linkancre.png', simple: ''});
			break;
			case 'editordef' :
			eachElement.editor = new style(eachElement, { type: 'button', BBCode: 'def', nom: 'def', texte: 'DEF', aide: 'Créé une définition pour le mot. La définition apparaitra lorsque la souris passera sur le mot.', valeurs: { 'mot à définir': ''}, content: { '0': 'Veuillez indiquer la définition du mot ou de la phrase', '1': 'définition'}, monobalise: '', value: { '0': 'Veuillez entrer le mot ou la phrase à définir', '1': 'mot à définir'}, image: 'def.png', simple: ''});
			break;
			case 'editordefliste' :
			eachElement.editor = new style(eachElement, { type: 'button', BBCode: 'defliste', nom: 'defliste', texte: 'DEFL', aide: 'Indique l\'endroit ou doit apparaitre la liste des mots définis du texte', valeurs: '', content: 'texte', monobalise: '1', value: '', image: 'defliste.png', simple: ''});
			break;
			case 'editorfaerien' :
			eachElement.editor = new style(eachElement, { type: 'button', BBCode: 'faerien', nom: 'faerien', texte: 'FAE', aide: 'Affiche un lien vers l\'espace membre du faerien', valeurs: { 'pseudo': ''}, content: 'texte', monobalise: '', value: { '0': 'Veuillez indiquer le pseudo du faerien', '1': 'pseudo'}, image: 'faerien.png', simple: ''});
			break;
			case 'editormailto' :
			eachElement.editor = new style(eachElement, { type: 'button', BBCode: 'mailto', nom: 'mailto', texte: 'MAIL', aide: 'Affiche un lien pour écrire un mail à un faerien', valeurs: { 'pseudo': ''}, content: 'texte', monobalise: '', value: { '0': 'Veuillez indiquer le pseudo du faerien', '1': 'pseudo'}, image: 'mailto.png', simple: ''});
			break;
			case 'editorsign' :
			eachElement.editor = new style(eachElement, { type: 'button', BBCode: 'sign', nom: 'sign', texte: 'SIGN', aide: 'Signature d\'un texte', valeurs: '', content: 'texte', monobalise: '', value: '', image: 'sign.png', simple: ''});
			break;
			case 'editorupload' :
			eachElement.editor = new style(eachElement, { type: 'hidden', BBCode: 'upload', nom: 'upload', texte: 'UPLOAD', aide: 'balise cachée', valeurs: '', content: 'texte', monobalise: '1', value: '', image: '', simple: ''});
			break;
			case 'editorsound' :
			eachElement.editor = new style(eachElement, { type: 'hidden', BBCode: 'sound', nom: 'sound', texte: 'SOUND', aide: 'balise cachée', valeurs: '', content: 'texte', monobalise: '1', value: '', image: '', simple: '1'});
			break;
			default:
				//debug('DEFAULT : ' +eachElement.id);
		}
	}
	var aTextAreaElement = document.getElementById('editorTextarea');
	aTextAreaElement.name='editorTextarea';

	var parent = aTextAreaElement.parentNode;
	var aMenuModeHiddenInput = document.createElement('input');
	aMenuModeHiddenInput.setAttribute('type', 'hidden');
	aMenuModeHiddenInput.setAttribute('id', 'editorMenuModeValue');
	aMenuModeHiddenInput.setAttribute('name', 'editorMenuModeValue');
	parent.appendChild(aMenuModeHiddenInput);

	if (navigator.userAgent.indexOf('MSIE') > -1) {
		var aDivLinkEditorWrap = document.createElement('div');
		aDivLinkEditorWrap.style.textAlign='right';

		var aLinkTypeEditorWrap = document.createElement('a');
		aLinkTypeEditorWrap.setAttribute('href', '#');
		aLinkTypeEditorWrap.id = 'editorTextareaWrapLinkChange';
		aLinkTypeEditorWrap.onclick=changeWrapEditor;
		aLinkTypeEditorWrap.innerHTML='Pas de retour à la ligne automatique';
		aDivLinkEditorWrap.appendChild(aLinkTypeEditorWrap);
		//parent.insertBefore(aLinkTypeEditorWrap, aTextAreaElement);
		parent.insertBefore(aDivLinkEditorWrap, aTextAreaElement);
	}

	var aUploadDiv = document.getElementById('editorUpload');
	aUploadDiv.style.display="none";
	aUploadDiv.listeUpload = new listeUpload(aUploadDiv);

}

function changeWrapEditor(e) {
	var aTextAreaElement = document.getElementById('editorTextarea');
	var aLinkTypeEditorWrap = document.getElementById('editorTextareaWrapLinkChange');
	var oldWrap = aTextAreaElement.getAttribute('wrap');
	if ((oldWrap == undefined) || (oldWrap == 'soft')) {
		aTextAreaElement.setAttribute('wrap', 'off');
		//aTextAreaElement.style.whiteSpace = 'nowrap';
		aLinkTypeEditorWrap.innerHTML='Restaurer le retour à la ligne';
//		var aText = aTextAreaElement.value;
//		aText = aText.split('\n').join('<br />');
//		aTextAreaElement.value = aText;
	} else {
		aTextAreaElement.setAttribute('wrap', 'soft');
		//aTextAreaElement.style.whiteSpace = 'null';
		aLinkTypeEditorWrap.innerHTML='Pas de retour à la ligne automatique';
//		var aText = aTextAreaElement.value;
//		aText = aText.split('<br />').join('\n');
//		aTextAreaElement.value = aText;
	}
}

function process(e) {
	var aTextAreaElement = document.getElementById('editorTextarea');

	var aTop = aTextAreaElement.scrollTop;
	var aLeft = aTextAreaElement.scrollLeft;

	aTextAreaElement.focus();
	if (document.selection && document.selection.createRange()) {

		var selection = document.selection.createRange();
		if (selection.parentElement() == aTextAreaElement){
			if (selection.text.length > 0) {
				selection.text = this.editor.construct(selection.text);
			}
			else {
				selection.text = this.editor.construct();
			}
		}
	}
	else if ((aTextAreaElement.selectionStart !== null) 
			&& (aTextAreaElement.selectionStart !== undefined) 
			&& (aTextAreaElement.selectionEnd)) {

		while(aTextAreaElement.value.substring(aTextAreaElement.selectionEnd-1, aTextAreaElement.selectionEnd) == ' ') {
			aTextAreaElement.selectionEnd--;
		}
		var debut = aTextAreaElement.value.substring(0, aTextAreaElement.selectionStart);
		var milieu = aTextAreaElement.value.substring(aTextAreaElement.selectionStart, aTextAreaElement.selectionEnd);
		var fin = aTextAreaElement.value.substring(aTextAreaElement.selectionEnd);
		if (milieu.length > 0) {
			aTextAreaElement.value = debut + this.editor.construct(milieu) + fin;
		}
		else {
			aTextAreaElement.value = debut + this.editor.construct() + fin;
		}
	}
	else {
		aTextAreaElement.value += this.editor.construct();
	}

	aTextAreaElement.focus();
	aTextAreaElement.scrollTop = aTop;
	aTextAreaElement.scrollLeft = aLeft;
	this.editor.endProcess();
}