function SetCaretPosition(control, pos)
{
	control.focus ();
	if (control.createTextRange) {
		// IE
		range = control.createTextRange();
		range.moveStart('character', -control.value.length);
		range.moveEnd('character', -control.value.length);
		range.moveStart('character', pos);
		range.moveEnd('character', 0);
		range.select ();
	} else if( control.setSelectionRange ){
		// Mozilla
		control.setSelectionRange(pos, pos+1);
	}
}

function GoToLine(control, lineNumber)
{
	var text = control.value;
	lineNumber = Number(lineNumber);
	//var linePattern = /.*(\r\n|\r|\n)/g;
	var linePattern = /.*\n/g;
	linePattern.lastIndex = 0;
	var lineStart = 0;
	//var lineEnd = 0;
	var lineMatch;
	var lineFound = 0;
	var found = false;

	while( lineMatch = linePattern.exec(text) ) {
		lineFound++;
		if (lineFound == lineNumber) {
			found = true;
			lineStart = lineMatch.index;
			//lineEnd = lineStart + lineMatch[0].length;
			break;
		}
	}

	if( ! found ){
		lineStart = control.value.length;
		lineEnd = lineStart;
	}

	if (control.createTextRange) {
		// IE count the \r too. Fix:
		SetCaretPosition(control, lineStart - lineNumber + 1);
	} else if( control.setSelectionRange ){
		// Mozilla 1.7 does not scroll to the selected range. Fix:
		SetCaretPosition(control, lineStart);
	}

	while( (lineMatch = linePattern.exec(text)) ){
		lineFound++;
	}
	control.scrollTop = Math.floor( control.scrollHeight * (lineNumber - 1 - control.rows/2.0) / lineFound);
}

var ta_control = null;

function GTL(line)
{
	GoToLine(ta_control, line);
}
