$.fn.textAreaTagSelectedText = function(startTag, endTag, minTagLength, moveCursor)
{
	var s = ""; //renvoie une chaine vide par défaut
	
	if (arguments.length != 4) return s;
	
	for (var i = 0; i < arguments.length; ++i) {
		if (arguments[i] == "undefined") return s;
	}
	
	if ((startTag.length < minTagLength) || (endTag.length < minTagLength)) return s;

	if (this[0].tagName != "TEXTAREA") return s;
		//on est maintenant certain que this[0] est bien un textarea
	
	if (document.selection) {
		//Internet Explorer
		
		var range = document.selection.createRange();
		s = range.text;
		
		if (s.length > 0) {
			var node = range.parentElement();
			
			if (node.nodeName != "TEXTAREA") {
				s = "";
			} else if ((startTag.length > 0) && (endTag.length > 0)) {
				range.text = startTag + s + endTag;
				
				/* Ajustement de la position du curseur */
				if (moveCursor == false) {
					//le curseur reste a l'emplacement ou le texte a été selectionner
					range = document.selection.createRange();
					var pos = startTag.length + s.length + endTag.length;
					range.moveStart('character', pos);
					range.collapse();
					range.select();
				} else if (moveCursor == true) {
					//le curseur va à la fin du texte
					this.select();                        
					range = document.selection.createRange();
					var pos = this.val().length;
					range.moveStart('character', pos);
					range.collapse();
					range.select();
				}
			}
		}
		
	} else if (this[0].selectionStart != "undefined") {
		//Firefox
		
		//Firefox renvoie toujours une valeur, même si la sélection n'est pas dans this !
		var startPos = this[0].selectionStart;
		var endPos = this[0].selectionEnd;
		
		//si les valeurs sont égales la sélection n'est pas dans le textarea !
		if (startPos != endPos) {
			s = this.val().slice(startPos, endPos);
			
			if ((startTag.length > 0) && (endTag.length > 0)) {
				var scrollValue = this.scrollTop();
				var debut = this.val().slice(0, startPos);
				var fin = this.val().slice(endPos);
			
				this.val(debut + startTag + s + endTag + fin);
				
				/* Ajustement de la position du curseur */
				if (moveCursor == false) {
					//le curseur reste a l'emplacement ou le texte a été selectionner
					var pos = debut.length + startTag.length + s.length + endTag.length;
					this[0].selectionStart = pos;
					this[0].selectionEnd = pos;
					this.scrollTop(scrollValue);
					this.focus();
				} else if (moveCursor == true) {
					//le curseur va à la fin du texte
					this.select();
					var pos = this.val().length;
					this[0].selectionStart = pos;
					this[0].selectionEnd = pos;                            
					this.scrollTop(this.height());
					this.focus();
				}
			}
		}                    
	}
	
	return s;
}

$(document).ready(function(){
	var minTagLength = 0;

	$(".ajoutBalise").click(function()
	{
		$("#description").textAreaTagSelectedText($(this).attr("startTag"), $(this).attr("endTag"), minTagLength, false);
		return false;
	});
	
});
