(function()
{
	$.fn.bbcodePaste = function(wrap1, wrap2)
	{
		return this.each(function()
		{
			if (document.selection)
			{
				var str = document.selection.createRange().text;
				this.focus();
				var sel = document.selection.createRange();
				sel.text = wrap1 + str + wrap2;
			}
			else if ((typeof this.selectionStart) != 'undefined')
			{
				var selLength = this.textLength;
				var selStart = this.selectionStart;
				var selEnd = this.selectionEnd;
				var oldScrollTop = this.scrollTop;
				var s1 = (this.value).substring(0,selStart);
				var s2 = (this.value).substring(selStart, selEnd)
				var s3 = (this.value).substring(selEnd, selLength);
				this.value = s1 + wrap1 + s2 + wrap2 + s3;
				this.selectionStart = s1.length;
				this.selectionEnd = s1.length + s2.length + wrap1.length + wrap2.length;
				this.scrollTop = oldScrollTop;
				this.focus();
			}
			else if (this.createTextRange)
			{
				this.focus();
				document.selection.createRange().duplicate().text = wrap1 + wrap2;
			}
			else if ((typeof this.selectionStart) != 'undefined')
			{
				var selEnd = this.selectionEnd;
				var txtLen = this.value.length;
				var txtbefore = this.value.substring(0,selEnd);
				var txtafter =  this.value.substring(selEnd, txtLen);
				var oldScrollTop = this.scrollTop;
				this.value = txtbefore + wrap1 + wrap2 + txtafter;
				this.selectionStart = txtbefore.length + (wrap1 + wrap2).length;
				this.selectionEnd = txtbefore.length + (wrap1 + wrap2).length;
				this.scrollTop = oldScrollTop;
				this.focus();
			}
			else
			{
				this.value += wrap1 + wrap2;
				this.focus();
			}
			
			$(this).change();
		});
	}
}());
