﻿/*
	Wichtige Funktionen für den Umgang mit Textareas
*/
function textarea() { } 


/*
	Auswahl und Cursorposition ermitteln - IE, Safari und Firefox
	Übergabe:
		- Zeiger auf Textarea Element
	Ergebnis:
		- Objekt mit
				. start: Start der Auswahl bzw. Cursorposition
				. end: Auswahlende
				. selection: ausgewählter Text
				. debugString: Ein String mit diesen Werten 
*/
textarea.prototype.getSelection=function(textarea) {
	if (!isIE) {	// bei Safari und Firefox trivial
		var startPoint = textarea.selectionStart; 
		var endPoint   = textarea.selectionEnd; 
		var selected_text= textarea.value.substr(startPoint, endPoint-startPoint) 
		var str="Start Index: " + startPoint + "\nEnd Index: " + endPoint + "\nSelected Text\n'" + selected_text + "'";
//		document.getElementById("alert").innerHTML=str;		
		var res={start:startPoint,end:endPoint,selection:selected_text,debugString:str};
		return res;
	}
	
	/*
		IE superkompliziert siehe
		http://linebyline.blogspot.com/2006/11/textarea-cursor-position-in-internet.html
	*/
	textarea.focus();
	var selection_range = document.selection.createRange().duplicate();
	
	if (selection_range.parentElement() != textarea) return;    // Check that the selection is actually in our textarea
	// Create three ranges, one containing all the text before the selection,
	// one containing all the text in the selection (this already exists), and one containing all
	// the text after the selection.
	var before_range = document.body.createTextRange();
	before_range.moveToElementText(textarea);                    // Selects all the text
	before_range.setEndPoint("EndToStart", selection_range);     // Moves the end where we need it
	
	var after_range = document.body.createTextRange();
	after_range.moveToElementText(textarea);                     // Selects all the text
	after_range.setEndPoint("StartToEnd", selection_range);      // Moves the start where we need it
	
	var before_finished = false, selection_finished = false, after_finished = false;
	var before_text, untrimmed_before_text, selection_text, untrimmed_selection_text, after_text, untrimmed_after_text;
	
	// Load the text values we need to compare
	before_text = untrimmed_before_text = before_range.text;
	selection_text = untrimmed_selection_text = selection_range.text;
	after_text = untrimmed_after_text = after_range.text;
	
	// Check each range for trimmed newlines by shrinking the range by 1 character and seeing
	// if the text property has changed.  If it has not changed then we know that IE has trimmed
	// a \r\n from the end.
	do {
	  if (!before_finished) {
		  if (before_range.compareEndPoints("StartToEnd", before_range) == 0) {
			  before_finished = true;
		  } else {
			  before_range.moveEnd("character", -1)
			  if (before_range.text == before_text) {
				  untrimmed_before_text += "\r\n";
			  } else {
				  before_finished = true;
			  }
		  }
	  }
	  if (!selection_finished) {
		  if (selection_range.compareEndPoints("StartToEnd", selection_range) == 0) {
			  selection_finished = true;
		  } else {
			  selection_range.moveEnd("character", -1)
			  if (selection_range.text == selection_text) {
				  untrimmed_selection_text += "\r\n";
			  } else {
				  selection_finished = true;
			  }
		  }
	  }
	  if (!after_finished) {
		  if (after_range.compareEndPoints("StartToEnd", after_range) == 0) {
			  after_finished = true;
		  } else {
			  after_range.moveEnd("character", -1)
			  if (after_range.text == after_text) {
				  untrimmed_after_text += "\r\n";
			  } else {
				  after_finished = true;
			  }
		  }
	  }
	
	} while ((!before_finished || !selection_finished || !after_finished));
	
	// Untrimmed success test to make sure our results match what is actually in the textarea
	// This can be removed once you're confident it's working correctly
	var untrimmed_text = untrimmed_before_text + untrimmed_selection_text + untrimmed_after_text;
	var untrimmed_successful = false;
	if (textarea.value == untrimmed_text) {
	  untrimmed_successful = true;
	}
	// ** END Untrimmed success test
	
	var startPoint = untrimmed_before_text.length;
	var endPoint = startPoint + untrimmed_selection_text.length;
	var selected_text = untrimmed_selection_text;
	var str="Start Index: " + startPoint + "\nEnd Index: " + endPoint + "\nSelected Text\n'" + selected_text + "'";
	var res={start:startPoint,end:endPoint,selection:selected_text,debugString:str};
	return res;	
//	document.getElementById("alert").innerHTML=str;
}

