function insertAtCaret(obj, s1, s2) 
{
		var text = '';
		
		if(document.selection) 
		{
			obj.focus();
			var orig = obj.value.replace(/\r\n/g, "\n");
			var range = document.selection.createRange();

			if(range.parentElement() != obj) 
			{
				return false;
			}
		
			text = range.text;
			range.text = s1 + text + s2;
			
			var actual = tmp = obj.value.replace(/\r\n/g, "\n");

			for(var diff = 0; diff < orig.length; diff++) 
			{
				if(orig.charAt(diff) != actual.charAt(diff)) break;
			}
			
			if (text.length != 0)
			{
				
					start = actual.indexOf(text, diff) + 1;
				
			}
			else
			{
				start = diff;
				
			}
		} 
		else if(obj.selectionStart) 
		{
			var start = obj.selectionStart;
			var end   = obj.selectionEnd;
			
			text =  obj.value.substr(start, end - start);
			if (obj.value.length == 0)
			{
				obj.value = s1 + text + s2;
			}
			else
			{
				obj.value = obj.value.substr(0, start) 
					+ 
					s1
					+
					text 
					+
					s2
					+ 
					obj.value.substr(end, obj.value.length);
			}
		}
		else
		{
			var start = 0;
			var end   = obj.selectionEnd;
			
			text =  obj.value.substr(start, end - start);
			if (obj.value.length == 0)
			{
				obj.value = s1 + text + s2;
			}
			else
			{
				obj.value = obj.value.substr(0, start) 
					+ 
					s1
					+
					text 
					+
					s2
					+ 
					obj.value.substr(end, obj.value.length);
			}
		}
		
		
		if(start != null) 
		{
			if (text.length == 0)
			{
				setCaretTo(obj, start + s1.length);
			}
			else
			{
				setCaretTo(obj, start + text.length + s1.length);
			}
			
		} 
		else 
		{
			obj.value += s1 + s2;
		}
}
	
function setCaretTo(obj, pos) 
{
		if(obj.createTextRange) 
		{
			var range = obj.createTextRange();
			range.move('character', pos);
			range.select();
		} 
		else if(obj.selectionStart) 
		{
			obj.focus();
			obj.setSelectionRange(pos, pos);
		}
}
