

var antiflood = false;
var last = 0;


// Permet de modifier la hauteur du textarea et de sa prévisualisation.
var nouvelleTaille = 200;

function changementTaille(textareaID, previsualisationID, difference) {
    var champTextarea = document.getElementById(textareaID);
    var previsualisation = document.getElementById(previsualisationID);
    
    var ancienneTaille = nouvelleTaille;
    nouvelleTaille = nouvelleTaille + Number(difference);
    
    if (nouvelleTaille < 200)
		nouvelleTaille = 200;
    if (nouvelleTaille > 2000)
		nouvelleTaille = 2000;
    
    change = nouvelleTaille+"px";
    
    champTextarea.style.height = change;
    previsualisation.style.height = change;
    
    return false;
}
// Fin de la fonction.


// Permet d'activer ou de désactiver la prévisualisation en direct.
function activationPrevisualisation(textareaID, previsualisationID) {
    previsualisation = document.getElementById(previsualisationID);
    
    if (document.getElementById('activation_'+textareaID).checked == true) {
	    previsualisation.style.display = 'block';
	    storeCaret(textareaID);
	    parse(textareaID, previsualisationID);
	}
	
    else
		previsualisation.style.display = 'none';
}
// Fin de la fonction.


// Permet d'enregistrer le curseur du textarea.
function storeCaret(textareaID) { 
    champTextarea = document.getElementById(textareaID);
    
    if (champTextarea.createTextRange)
		champTextarea.curseur = document.selection.createRange().duplicate();
}
// Fin de la fonction.


// Permet d'insérer une balise simple de le textarea.
function balise(baliseDebut, baliseFin, textareaID) {
    var champTextarea = document.getElementById(textareaID);
    var scroll = champTextarea.scrollTop;
    baliseDebut = remplace(baliseDebut, '<br />', "\n");
    
    if(baliseFin == '')
		baliseDebut = ' ' + baliseDebut + ' ';
    
    if (champTextarea.curseur) {
	    champTextarea.curseur.text = baliseDebut + champTextarea.curseur.text + baliseFin;
	}
	
    else if (champTextarea.selectionStart >= 0 && champTextarea.selectionEnd >= 0) {
	    var debut = champTextarea.value.substring(0, champTextarea.selectionStart);
	    var entre = champTextarea.value.substring(champTextarea.selectionStart, champTextarea.selectionEnd);
	    var fin = champTextarea.value.substring(champTextarea.selectionEnd);
	    
	    champTextarea.value = debut + baliseDebut + entre + baliseFin + fin;
	    champTextarea.focus();
	    champTextarea.setSelectionRange(debut.length + baliseDebut.length, champTextarea.value.length - fin.length - baliseFin.length);
	}
	
    else {
	    champTextarea.value  += baliseDebut + baliseFin;
	    champTextarea.focus();
	}
	
    champTextarea.scrollTop = scroll;
}
// Fin de la fonction.


// Permet le "parsage" en temps réel des balises saisi.
function parse(textareaID, previsualisationID) {
    if (parse.arguments.length == 3)
		var is_opened_window = true;
		
    else
		var is_opened_window = false;
    
    if ((is_opened_window && opener.document.getElementById('activation_'+textareaID).checked)
	|| (!is_opened_window && document.getElementById('activation_'+textareaID).checked)) 
	{
		clearTimeout(last);
		last = setTimeout('parse2(\''+textareaID+'\',\''+previsualisationID+'\', '+is_opened_window+')', 100);
		antiflood = true;
	}
}
// Fin de la fonction.


// Permet le "parsage" du bbcode ainsi que des smilies en temps réel.
function parse2(textareaID, previsualisationID, is_opened_window) {
	if (is_opened_window) {
		var champTextarea = opener.document.getElementById(textareaID);
		var previsualisation = opener.document.getElementById(previsualisationID);
	}
	
	else {
		var champTextarea = document.getElementById(textareaID);
		var previsualisation = document.getElementById(previsualisationID);
	}
	
	var contenu = champTextarea.value;
	antiflood = false;
	
	if (document.body.scrollTop)
		var scroll = document.body.scrollTop;
	
	else
		var scroll = window.pageYOffset;
	
	if (champTextarea.selectionStart != 'undefined' && !champTextarea.curseur) {
		var pos = champTextarea.selectionStart;
		contenu = remplace(remplace(contenu.substring(0, pos).replace(/&/g,'&amp;'),'>','&gt;'),'<','&lt;') + '<a href="#" name="prev_ancre_suivi" id="prev_ancre_suivi"></a>' + 
		remplace(remplace(contenu.substring(pos).replace(/&/g,'&amp;'),'>','&gt;'),'<','&lt;');
	}
	
	else
		contenu = remplace(remplace(contenu.replace(/&/g,'&amp;'),'>','&gt;'),'<','&lt;');
	
	// Remplace les \n par des <br />.
	contenu = remplace(contenu, "\n", '<br />');
	
	contenu = contenu.replace(/&lt;gras&gt;([\s\S]*?)&lt;\/gras&gt;/g, '<strong>$1</strong>');
	contenu = contenu.replace(/&lt;souligner&gt;([\s\S]*?)&lt;\/souligner&gt;/g, '<span class="souligner">$1</span>');
	contenu = contenu.replace(/&lt;italique&gt;([\s\S]*?)&lt;\/italique&gt;/g, '<em>$1</em>');
	contenu = contenu.replace(/&lt;barrer&gt;([\s\S]*?)&lt;\/barrer&gt;/g, '<strike>$1</strike>');
	contenu = contenu.replace(/&lt;couleur nom="(orange|noir|marron|vertf|olive|marine|violet|bleugris|argent|gris|rouge|vertc|jaune|bleu|rose|turquoise|blanc)"&gt;([\s\S]*?)&lt;\/couleur&gt;/g, '<span class="Couleur_$1">$2</span>');
	contenu = contenu.replace(/&lt;police nom="(arial|times|courrier|impact|geneva|optima)"&gt;([\s\S]*?)&lt;\/police&gt;/g, '<span class="Police_$1">$2</span>');
	contenu = contenu.replace(/&lt;taille valeur="(ttpetit|tpetit|petit|gros|tgros|ttgros)"&gt;([\s\S]*?)&lt;\/taille&gt;/g, '<span class="Taille_$1">$2</span>');
	contenu = contenu.replace(/&lt;image[ \w="]*&gt;([^"]*?)&lt;\/image&gt;/g, '<img src="$1" alt="Image" />');
	contenu = contenu.replace(/&lt;position valeur="(gauche|droite|centre|justifie)"&gt;([\s\S]*?)&lt;\/position&gt;/g, '<div class="Position_$1">$2</div>');
	contenu = contenu.replace(/&lt;flottant valeur="(gauche|droite)"&gt;([\s\S]*?)&lt;\/flottant&gt;/g, '<div class="Flottant_$1">$2</div>');
	contenu = contenu.replace(/&lt;lien&gt;(?!javascript:)([\s\S]*?)&lt;\/lien&gt;/g, '<a href="$1">$1</a>');
	contenu = contenu.replace(/&lt;lien url="(?!javascript:)([\s\S]*?)"&gt;([\s\S]*?)&lt;\/lien&gt;/g, '<a href="$1">$2</a>');
	contenu = contenu.replace(/&lt;youtube url="(?!javascript:)([\s\S]*?)"&gt;([\s\S]*?)&lt;\/youtube&gt;/g, '<a href="$1">$2</a>');
	contenu = contenu.replace(/&lt;email&gt;([\s\S]*?)&lt;\/email&gt;/g, '<a href="mailto:$1">$1</a>');
	contenu = contenu.replace(/&lt;email adresse="([\s\S]*?)"&gt;([\s\S]*?)&lt;\/email&gt;/g, '<a href="mailto:$1">$2</a>');
	contenu = contenu.replace(/&lt;(information|attention|erreur|question)&gt;([\s\S]*?)&lt;\/\1&gt;/g, '<div class="Remarque $1">$2</div>');
	contenu = contenu.replace(/&lt;liste&gt;\s*(<br \/>)?\s*([\s\S]*?)&lt;\/liste&gt;/g, '<ul>$2</ul>');
	contenu = contenu.replace(/&lt;liste type="(disque|cercle|rectangle|rien)"&gt;\s*(<br \/>)?\s*([\s\S]*?)&lt;\/liste&gt;/g, '<ul class="Liste_$1">$3</ul>');
	contenu = contenu.replace(/&lt;liste type="([1iIaA])"&gt;\s*(<br \/>)?\s*([\s\S]*?)&lt;\/liste&gt;/g, '<ol class="Liste_$1">$3</ol>');
	contenu = contenu.replace(/&lt;puce&gt;([\s\S]*?)&lt;\/puce&gt;\s*(<br \/>)?\s*/g, '<li>$1</li>');
	contenu = contenu.replace(/&lt;acronyme valeur="([\s\S]*?)"&gt;([\s\S]*?)&lt;\/acronyme&gt;/g, '<acronym title="$1">$2</acronym>');
	
	contenu = contenu.replace(/&lt;exposant&gt;([\s\S]*?)&lt;\/exposant&gt;/g, '<sup>$1</sup>');
	contenu = contenu.replace(/&lt;indice&gt;([\s\S]*?)&lt;\/indice&gt;/g, '<sub>$1</sub>');
	contenu = contenu.replace(/&lt;secret&gt;([\s\S]*?)&lt;\/secret&gt;/g, '<div><span class="spoiler_hidden">Secret<a onclick="Spoiler(this); return false;" href=""> (cliquez ici pour afficher)</a></span><div class="spoiler2_hidden"><div class="spoiler3_hidden" style="display: none;">$1</div></div></div>');
	
	
	var i = 0;
	
	while ((contenu.search(/&lt;citation nom=\"(.*?)\"&gt;([\s\S]*?)&lt;\/citation&gt;/g) != -1 || contenu.search(/&lt;citation&gt;([\s\S]*?)&lt;\/citation&gt;/g) != -1)
		&& i < 20)
	{
		contenu = contenu.replace(/&lt;citation (nom|rid)=\"(.*?)\"&gt;([\s\S]*?)&lt;\/citation&gt;/g, '<br /><span class="citation">Citation de $2</span><div class="citation2">$3</div>');
			contenu = contenu.replace(/&lt;citation&gt;([\s\S]*?)&lt;\/citation&gt;/g, '<br /><span class="citation">Citation</span><div class="citation2">$1</div>');
		i++;
	}
	
	contenu = contenu.replace(/&lt;tableau&gt;\s*(<br \/>)?\s*([\s\S]*?)&lt;\/tableau&gt;/g, '<table class="Forum">$2</table>');
	contenu = contenu.replace(/&lt;ligne&gt;\s*(<br \/>)?\s*([\s\S]*?)&lt;\/ligne&gt;\s*(<br \/>)?\s*/g, '<tr>$2</tr>');
	contenu = contenu.replace(/&lt;entete&gt;([\s\S]*?)&lt;\/entete&gt;\s*(<br \/>)?\s*/g, '<th>$1</th>');
	contenu = contenu.replace(/&lt;cellule&gt;([\s\S]*?)&lt;\/cellule&gt;\s*(<br \/>)?\s*/g, '<td>$1</td>');
	
	previsualisation.innerHTML = contenu;
}
// Fin de la fonction.


// Remplace "search" par "replace" dans "data".
function remplace(data, search, replace) {
	var temp = data;
	var longueur = search.length;
	
	while (temp.indexOf(search) > -1) {
		pos = temp.indexOf(search);
		temp = (temp.substring(0, pos) + replace + temp.substring((pos + longueur), temp.length));
	}
	
	return temp;
}
// Fin de la fonction.


// Permet d'ajouter une balise au textarea du type liste déroulante.
function baliseListe(nom, paramettre, listeID, textareaID, previsualisationID) {
	valeur = document.getElementById(listeID).value;
	
	if (valeur != '')
		balise('<'+nom+' '+paramettre+'="'+valeur+'">','</'+nom+'>', textareaID);
	else
		balise('<'+nom+'>','</'+nom+'>', textareaID);
	
	parse(textareaID, previsualisationID);
	
	if (document.getElementById(listeID))
		document.getElementById(listeID).options[0].selected = true;
}
// Fin de la liste.


// Permet d'ajouter une balise au textarea (nécessitant la saisi de l'usager).
function baliseSpeciale(nom, paramettre, textareaID, previsualisationID) {
	var champTextarea = document.getElementById(textareaID);
	var texte = '';
	
	switch (nom) {
		case "citation":
			texte = 'Veuillez renseigner l\'auteur de la citation';
			valeur = prompt(texte);
			
			if (!valeur && nom == 'citation') {
				baliseDebut = '<'+nom+'>';
			}
			else {
				baliseDebut = '<'+nom+' '+paramettre+'="'+valeur+'">';
			}
			
			baliseFin = '</'+nom+'>';
		break;
		
		
		case "lien":
			if (champTextarea.curseur)
				txt_selectionne = champTextarea.curseur.text;
				
			else if (champTextarea.selectionStart >= 0 && champTextarea.selectionEnd >= 0)
				txt_selectionne = champTextarea.value.substring(champTextarea.selectionStart, champTextarea.selectionEnd);
			
			else
				txt_selectionne = '';
		
			if (txt_selectionne.indexOf('http://') == 0
				|| txt_selectionne.indexOf('https://') == 0
				|| txt_selectionne.indexOf('ftp://') == 0
				|| txt_selectionne.indexOf('apt://') == 0)
			{
				texte = 'Veuillez indiquer le texte du lien';
				valeur2 = prompt(texte);
				baliseDebut = '<'+nom+' '+paramettre+'="';
				baliseFin = '">'+valeur2+'</'+nom+'>';
			}
				
			else if (txt_selectionne == '') {
				texte = 'Veuillez indiquer le lien';
				valeur = prompt(texte);
				valeur2 = prompt('Veuillez indiquer le texte du lien');
				baliseDebut = '<'+nom+' '+paramettre+'="'+valeur+'">'+valeur2;
				baliseFin = '</'+nom+'>';
			}
			
			else {
				texte = 'Veuillez indiquer le lien';
				valeur = prompt(texte);
				baliseDebut = '<'+nom+' '+paramettre+'="'+valeur+'">';
				baliseFin = '</'+nom+'>';
			}
		break;
		
		
		case "email":
			texte = 'Veuillez indiquer l\'email';
			valeur = prompt(texte);
			baliseDebut = '<'+nom+' '+paramettre+'="'+valeur+'">';
			baliseFin = '</'+nom+'>';
		break;
		
		
		case "tableau":
			var ligne = prompt('Veuillez saisir le nombre de ligne de votre futur tableau');
			var colonne = prompt('Veuillez saisir le nombre de colonne de votre futur tableau');
			
			colonne = parseInt(colonne);
			ligne = parseInt(ligne);
			
			if (isNaN(colonne) || isNaN(ligne)) {
				alert('Vous devez saisir des chiffres.');
			}
			else if (colonne > 15) {
				alert('La limite de colonne est de 15.');
			}
			else if (ligne > 40) {
				alert('La limite de ligne est de 40.');
			}
			else {
				var i;
				var o; 
				var p;
				var c;
				
				var texte = '';
				
				for (i=0, o=ligne; i<o; i++) {
					texte += '\t<ligne>\n';
					for (p=0, c=colonne; p<c; p++) {
						
						if (ligne > 1 && i == 0)
							texte += '\t\t<entete>Ecrivez-ici.</entete>\n';
						else
							texte += '\t\t<cellule>Ecrivez-ici.</cellule>\n';
					}
					texte+= '\t</ligne>\n';
				}
				
				baliseDebut = '<tableau>\n'+texte;
				baliseFin = '</tableau>';
			}
		break;
	}

	balise(baliseDebut, baliseFin, textareaID); parse(textareaID, previsualisationID);
	
	if (document.getElementById(nom))
		document.getElementById(nom).options[0].selected = true;
}
// Fin de la fonction.

// Ajoute une liste à puce au textarea.
function listePuce(textareaID, previsualisationID) {
	var texte = '';
	
	while (tmp = prompt('Saisissez le contenu de la puce (Faites annuler pour arreter)'))
		texte += '<puce>'+tmp+'</puce>'+"\n";
	
	balise('<liste>'+"\n"+texte,'</liste>', textareaID); parse(textareaID, previsualisationID);
}
