var amField = {

	setSelectionRange: function(input, start, end) {
		input = $(input);
		if (Prototype.Browser.Gecko) {
			input.setSelectionRange(start, end);
		} else if(Prototype.Browser.IE) {
			// assumed IE
			var range = input.createTextRange();
			range.collapse(true);
			range.moveStart("character", start);
			range.moveEnd("character", end - start);
			range.select();
		}
	},

	getSelectionStart: function(input) {
		input = $(input);
		if (Prototype.Browser.Gecko) {
			return input.selectionStart;
		} else if(Prototype.Browser.IE) {
			var range = document.selection.createRange();
			var isCollapsed = range.compareEndPoints("StartToEnd", range) == 0;
			if (!isCollapsed)
				range.collapse(true);
			var b = range.getBookmark();
			return b.charCodeAt(2) - 2;
		}
		return false;
	},

	getSelectionEnd: function(input) {
		input = $(input);
		if (Prototype.Browser.Gecko) {
			return input.selectionEnd;
		} else if(Prototype.Browser.IE) {
			var range = document.selection.createRange();
			var isCollapsed = range.compareEndPoints("StartToEnd", range) == 0;
			if (!isCollapsed)
				range.collapse(false);
			var b = range.getBookmark();
			return b.charCodeAt(2) - 2;
		}
		return false;
	},
	
	insertAtCaret: function(input, string) {
		input = $(input);
		pos = input.getSelectionStart();
		str = input.getValue();
		input.setValue(str.substring(0,pos) + string + str.substring(pos));
		input.setSelectionRange(pos+1,pos+1);
	}
}

Element.addMethods(amField);