// Insertion des balise dans le textarea
function insertTag(startTag, endTag, textareaId, tagType)
{
    var field = document.getElementById(textareaId); // On récupère la zone de texte
    field.focus(); // Remise du focus sur le textarea
    
	// Récupération de la sélection
	if (window.ActiveXObject) // Pour IE
	{
		var textRange = document.selection.createRange();
		var currentSelection = textRange.text;
	}
	else
	{
		var startSelection   = field.value.substring(0, field.selectionStart);
		var currentSelection = field.value.substring(field.selectionStart, field.selectionEnd);
		var endSelection     = field.value.substring(field.selectionEnd);
	}
	
	// Analyse du tagType
	if (tagType)
	{
        switch (tagType)
		{
            case "lien":
				endTag = "[/url]";
				if (currentSelection) // S'il y a une sélection
				{
					if (currentSelection.indexOf("http://") == 0 || currentSelection.indexOf("https://") == 0 || currentSelection.indexOf("ftp://") == 0 || currentSelection.indexOf("www.") == 0) // Si elle début par l'un de ces termes, on demande le libellé
					{
                        var label = prompt("Quel est le libellé du lien ?") || "";
                        startTag = "[url=" + currentSelection + "]";
                        currentSelection = label;
					}
					else // Si ce n'est pas un lien c'est un libellé, on demande l'URL
					{
                        var URL = prompt("Quelle est l'url ?");
                        startTag = "[url=" + URL + "]";
					}
				}
				else // Pas de sélection, on demande l'URL et le libelle
				{
					var URL = prompt("Quelle est l'url ?") || "";
					var label = prompt("Quel est le libellé du lien ?") || "";
					startTag = "[url=" + URL + "]";
					currentSelection = label;
				}
            break;
            case "citation":
				endTag = "[/quote]";
				if (currentSelection)
				{
					if (currentSelection.length > 30) // C'est certainement la citation
					{
                        var auteur = prompt("Quel est l'auteur de la citation ?") || "";
                        startTag = "[quote name=\"" + auteur + "\"]";
					}
					else // C'est certainement l'auteur
					{
                        var citation = prompt("Quelle est la citation ?") || "";
                        startTag = "[quote name=\"" + currentSelection + "\"]";
                        currentSelection = citation;    
					}
				}
				else // Pas de selection, on demande l'auteur et la citation
				{
					var auteur = prompt("Quel est l'auteur de la citation ?") || "";
					var citation = prompt("Quelle est la citation ?") || "";
					startTag = "[quote name=\"" + auteur + "\"]";
					currentSelection = citation;
				}
            break;
            case "email":
				endTag = "[/email]";
				if (currentSelection) // S'il y a une sélection
				{
					var regexEmail = /^[a-zA-Z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$/;
					
					if (regexEmail.test(currentSelection)) // Si c'est une adresse email on demande le libellé
					{
                        var label = prompt("Quel est le libellé de l'email ?") || "";
                        startTag = "[email=" + currentSelection + "]";
                        currentSelection = label;
					}
					else // Si ce n'est pas une adresse email c'est un libellé, on demande l'adresse
					{
                        var email = prompt("Quelle est l'email ?");
                        startTag = "[email=" + email + "]";
					}
				}
				else // Pas de sélection, on demande l'email et le libelle
				{
					var email = prompt("Quelle est l'email ?") || "";
					var label = prompt("Quel est le libellé de l'email ?") || "";
					startTag = "[email=" + email + "]";
					currentSelection = label;
				}
            break;
            case "liste_a_puce":
				startTag = "[list]";
				var pucesContenu = "";
				if (currentSelection) // S'il y a une sélection
				{
					var i = 1;
					var puce = "";
					do {
						i++;
						puce = prompt("Quel est le contenu de la puce " + i + " (annulez pour arrêter ici) ?") || "";
						if(puce)
							pucesContenu = pucesContenu + "[*]" + puce;
					} while (puce);
				}
				else // Pas de sélection, on demande l'URL et le libelle
				{
					var i = 0;
					var puce = new Array();
					do {
						i++;
						puce[i] = prompt("Quel est le contenu de la puce " + i + " (annulez pour arrêter ici) ?") || "";
						if(puce[i] && i != 1)
							pucesContenu = pucesContenu + "[*]" + puce[i];
						else if(puce[i])
							pucesContenu = puce[i];
					} while (puce[i]);
				}
				endTag = pucesContenu + "[/list]";
            break;
        }
    }
	
	// Remplacement et resélection
	if (window.ActiveXObject) // Pour IE
	{
		textRange.text = startTag + currentSelection + endTag;
        textRange.moveStart("character", -endTag.length - currentSelection.length);
        textRange.moveEnd("character", -endTag.length);
        textRange.select();
	}
	else
	{
		field.value = startSelection + startTag + currentSelection + endTag + endSelection;
		field.focus();
		field.setSelectionRange(startSelection.length + startTag.length, startSelection.length + startTag.length + currentSelection.length);
	}
   
}

// Aperçu automatique
function preview(textareaId, previewDiv)
{
	var field = textareaId.value;
	if (document.getElementById('previsualisation').checked && field)
	{
		var smiliesName = new Array(':D', ':euh:', ':s', ':\\(', ':\\$', '\\^\\^', ':\\|', ':o', ':\\)', ':triste:', ';\\)', ':p', 'xD');
		var smiliesUrl  = new Array('joyeux.png', 'ennuye.png', 'confu.png', 'triste.png', 'honteux.gif', 'angelique.png', 'neutre.png', 'surpris.png', 'heureux.png', 'pleurnichard.png', 'tranquille.png', 'moqueur.png', 'rigolard.png');
		var smiliesPath = "img/smiley/";
	
		field = field.replace(/&/g, '&amp;');
		field = field.replace(/</g, '&lt;').replace(/>/g, '&gt;');
		field = field.replace(/\n/g, '<br />').replace(/\t/g, '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;');
		
		field = field.replace(/\[b\]([\s\S]*?)\[\/b\]/g, '<strong>$1</strong>');
		field = field.replace(/\[i\]([\s\S]*?)\[\/i\]/g, '<em>$1</em>');
		field = field.replace(/\[u\]([\s\S]*?)\[\/u\]/g, '<u>$1</u>');
		field = field.replace(/\[s\]([\s\S]*?)\[\/s\]/g, '<strike>$1</strike>');
		field = field.replace(/\[left\]([\s\S]*?)\[\/left\]/g, '<div style="text-align: left;">$1</div>');
		field = field.replace(/\[center\]([\s\S]*?)\[\/center\]/g, '<div style="text-align: center;">$1</div>');
		field = field.replace(/\[right\]([\s\S]*?)\[\/right\]/g, '<div style="text-align: right;">$1</div>');
		field = field.replace(/\[justify\]([\s\S]*?)\[\/justify\]/g, '<div style="text-align: justify;">$1</div>');
		field = field.replace(/\[float=left\]([\s\S]*?)\[\/float\]/g, '<div class="flottant_gauche">$1</div>');
		field = field.replace(/\[float=right\]([\s\S]*?)\[\/float\]/g, '<div class="flottant_droit">$1</div>');
		field = field.replace(/\[float=none\]([\s\S]*?)\[\/float\]/g, '<div class="no_flottant">$1</div>');
		field = field.replace(/\[color=(.*?)\]([\s\S]*?)\[\/color\]/g, '<span class="$1">$2</span>');
		field = field.replace(/\[url\]([\s\S]*?)\[\/url\]/g, '<a href="$1">$1</a>');
		field = field.replace(/\[url=([\s\S]*?)\]([\s\S]*?)\[\/url\]/g, '<a href="$1">$2</a>');
		field = field.replace(/\[img\]([\s\S]*?)\[\/img\]/g, '<img src="$1" alt="Image"/>');
		field = field.replace(/\[quote name=\"(.*?)\"\]/g, '<br /><span class="citation">Citation : $1</span><div class="citation2">');
		field = field.replace(/\[quote url=(.*?)\]/g, '<br /><span class="citation"><a href="$1">Citation</a></span><div class="citation2">');
		field = field.replace(/\[quote\]/g, '<br /><span class="citation">Citation</span><div class="citation2">');
		field = field.replace(/\[\/quote\]/g, '</div>'); // Fin de citation
		field = field.replace(/\[size=(.*?)\]([\s\S]*?)\[\/size\]/g, '<span class="police_size_$1">$2</span>');
		field = field.replace(/\[email=([\s\S]*?)\]([\s\S]*?)\[\/email\]/g, '<a href="mailto:$1">$2</a>');
		field = field.replace(/\[email\]([\s\S]*?)\[\/email\]/g, '<a href="mailto:$1">$1</a>');
		field = field.replace(/\[list\]([\s\S]*?)\[\/list\]/g, '<ul><li>$1</li></ul>');
		field = field.replace(/\[\*\]/g, '</li><li>');
		field = field.replace(/\[def=([\s\S]*?)\]([\s\S]*?)\[\/def\]/g, '<acronym title="$1">$2</acronym>');
		field = field.replace(/\[thanx\](.*?)\[\/thanx\]/g, '<div class="post_thanx">$1</div>');
		field = field.replace(/\[title\](.*?)\[\/title\]/g, '<h3 class="post">$1</h3>');
		
		for (var i=0, c=smiliesName.length; i<c; i++)
		{
			field = field.replace(new RegExp(" " + smiliesName[i] + " ", "g"), "&nbsp;<img src=\"" + smiliesPath + smiliesUrl[i] + "\" alt=\"" + smiliesUrl[i] + "\" class=\"smiley\" />&nbsp;");
		}
		
		document.getElementById(previewDiv).innerHTML = field;
	}
}

// Objet XMLHttpRequest
function getXMLHttpRequest()
{
	var xhr = null;	
	if (window.XMLHttpRequest || window.ActiveXObject)
	{
		if (window.ActiveXObject)
		{
			try
			{
				xhr = new ActiveXObject("Msxml2.XMLHTTP");
			}
			catch(e)
			{
				xhr = new ActiveXObject("Microsoft.XMLHTTP");
			}
		}
		else
		{
			xhr = new XMLHttpRequest();
		}
	}
	else
	{
		alert("Votre navigateur ne supporte pas l'objet XMLHTTPRequest...");
		return null;
	}	
	return xhr;
}

// Aperçu finale
function view(textareaId, viewDiv)
{
	var content = encodeURIComponent(document.getElementById(textareaId).value);
	var xhr = getXMLHttpRequest();
	
	if (xhr && xhr.readyState != 0)
	{
		xhr.abort();
		delete xhr;
	}
	
	xhr.onreadystatechange = function()
	{
		if (xhr.readyState == 4 && xhr.status == 200)
		{
			document.getElementById(viewDiv).innerHTML = xhr.responseText;
		}
		else if (xhr.readyState == 3)
		{
			document.getElementById(viewDiv).innerHTML = "<div style=\"text-align: center;\">Chargement en cours...</div>";
		}
	}
	
	// Parsage du contenu du textarea
	xhr.open("POST", "apercu_final.php", true);
	xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	xhr.send("string=" + content);
}

// Règle la hauteur du textarea et des aperçus
function height_edit(textareaId, previewDiv, viewDiv, sens)
{
	var slctElmt = new Array(previewDiv, viewDiv);
	
	for(var i=0; i<2; i++) {
		var elmt = document.getElementById(slctElmt[i]);
		var hauteur = parseInt(elmt.style.maxHeight);
	
		if(sens == 50 && hauteur < 1200) {
			hauteur += 50;
			hauteur = hauteur + 'px';
		} else if(sens == -50 && hauteur > 200) {
			hauteur -= 50;
			hauteur = hauteur + 'px';
		}
		elmt.style.maxHeight = hauteur;
	}
	
	var elmt = document.getElementById(textareaId);
	var hauteur = parseInt(elmt.style.height);
			if(sens == 50 && hauteur < 1200) {
		hauteur += 50;
		hauteur = hauteur + 'px';
	} else if(sens == -50 && hauteur > 200) {
		hauteur -= 50;
		hauteur = hauteur + 'px';
	}
	elmt.style.height = hauteur;
}

// Cache l'aperçu automatique s'il l'option est décochée
function toggleDisplay(elmt)
{
   if(typeof elmt == "string")
      elmt = document.getElementById(elmt);
   if(elmt.style.display == "none")
      elmt.style.display = "";
   else
      elmt.style.display = "none";
}

function rand(min,max)
{
	a = (max+1)-min;
	b = Math.floor(a * Math.random());
	r = b + min ;
	return r;
} 

// Explication de mise en forme automatique
function explain(tagType, howtoId)
{
	howTo = document.getElementById(howtoId);
	howTo.innerHTML = "Conseil";
	
	switch (tagType)
	{
		case "gras":
			howTo.innerHTML = "Texte gras : [b]texte[/b]";
		break;
		case "italic":
			howTo.innerHTML = "Texte italique : [i]texte[/i]";
		break;
		case "souligne":
			howTo.innerHTML = "Texte souligné : [u]texte[/u]";
		break;
		case "barre":
			howTo.innerHTML = "Texte barré : [s]texte[/s]";
		break;
		case "citation":
			var alea = rand(1, 3);
			if(alea == 1){
				howTo.innerHTML = "Citation : [quote]texte[/quote] ou [quote name=\"Pseudo\"]texte[/quote]";
			} else{
				howTo.innerHTML = "Citation : [quote]texte[/quote] ou [quote url=http://lien]texte[/quote]";
			}
		break;
		case "liste":
			howTo.innerHTML = "Liste à puces : [list]puce1[*]puce2[*]...[*]pucex[/list]";
		break;
		case "lien":
			howTo.innerHTML = "Insérer un lien : [url]http://lien[/url] ou [url=http://lien]texte descriptif[/url]";
		break;
		case "image":
			howTo.innerHTML = "Insérer une image : [img]http://image_url[/img]";
		break;
		case "email":
			howTo.innerHTML = "[email=adresse@email.com]texte descriptif[/email]";
		break;
		case "gauche":
			howTo.innerHTML = "Texte à gauche : [left]texte[/left]";
		break;
		case "centrer":
			howTo.innerHTML = "Texte centré : [center]texte[/center]";
		break;
		case "droite":
			howTo.innerHTML = "Texte à droite : [right]texte[/right]";
		break;
		case "justifier":
			howTo.innerHTML = "Texte justifié : [justify]texte[/justify]";
		break;
		case "taille":
			howTo.innerHTML = "Modifier la taille du texte";
		break;
		case "couleur":
			howTo.innerHTML = "Modifier la couleur du texte";
		break;
		case "flottant":
			howTo.innerHTML = "Insérer ou supprimer un flottant";
		break;
		case "reduire":
			howTo.innerHTML = "Réduire la zone de saisie";
		break;
		case "agrandir":
			howTo.innerHTML = "Agrandir la zone de saisie";
		break;
		case "previewAuto":
			if(document.getElementById("previsualisation").checked == true)
				howTo.innerHTML = "Désactiver la prévisualisation automatique";
			else
				howTo.innerHTML = "Activer la prévisualisation automatique";
		break;
		default:
			howTo.innerHTML = "Astuce : les mises en forme peuvent être appliquées rapidement en sélectionnant le texte.";
		break;
	}
}


// Spoiler
function switch_spoiler(spoilerId) 
{ 
   var spoiler = document.getElementById(spoilerId);
   
   if (spoiler.style.display == 'none')
      spoiler.style.display = ''; 
   else 
      spoiler.style.display = 'none'
} 


// Agrandisseur de la hauteur du corps lorsque le menu dépasse. Spécial pour IE6
function redim_corps(corpsId, menuId)
{
	var corps = document.getElementById(corpsId);
	var menu = document.getElementById(menuId);
	
	if(corps.offsetHeight < menu.offsetHeight) { // Si le menu est plus haut que le corps
		corps.style.height = menu.offsetHeight;
	}
}


// Choix du titre d'une photo avant son upload
function switch_choix_legende(choixId, deuzId) 
{ 
	var choix = document.getElementById(choixId);
	var deuz = document.getElementById(deuzId);
	
	choix.style.display = '';
	deuz.style.display = 'none';
} 