if (navigator.product == "Gecko")
{
	function SelectionObject(Window)
	{ 
		this.window=(Window?Window:window);
		this.document=this.window.document;
	}
	SelectionObject.prototype={
	  "clear":function() {
		  try {
			  var sel = this.window.getSelection();
			  sel.collapse(true);
			  sel.dettach();
		  } catch (ex) {}
	  },
	  "createRange":function() {
		  if (this.type=="none") {
			  var range = "no selection";
			  range.text=""; range.htmlText="";
			  return range;
		  }
		  if (!this.activeElement) {
			  var txt = this.document.getSelection()
			  var sel = {};
			  try { sel=this.window.getSelection().getRangeAt(0); } catch (ex) {}
			  var html = getHTMLOfSelection(this.window, this.document);
			  var range = null;
			  
			  range = new ControlRangeObject();
			  range.isControlRange=true;
			  range._text=(""+txt+"");
			  range._htmlText=html;
			  range._range=sel;
			  range.base=sel.commonAncestorContainer?sel.commonAncestorContainer:this.document.body
			  range.items=new Array();
			  range.addElement=range.add;
			  
			  try {
				  while (range.base.nodeName.substr(0,1)=="#") {
					  range.base=range.base.parentNode;
				  }
				  var index = 0; var started;
				  var current = range.base.childNodes[0];
				  while (current) {
					  if (started || current==sel.startContainer || current==sel.commonAncestorContainer) {
						  started = true;
						  range.items.push(current);
					  }
					  if (current == sel.endContainer || current==sel.commonAncestorContainer) {
						  break;
					  }
					  index++;
					  current = range.base.childNodes[index];
				  }
				  range.length=range.items.length;
			  } catch (ex) {}
			  
			  return range;
		  } else {
			var base = this.activeElement;
			var range = new ControlRangeObject();
			range.isControlRange=false;
			range._text = base.value.substring(base.selectionStart, base.selectionEnd);
			range._htmlText=range._text;
			range._range=null;
			range.base=base;
			range.items=[range.base];
			range.addElement=range.add;
			
			return range;
		  }
		}
	}
	
	SelectionObject.prototype.empty=SelectionObject.prototype.clear;
	SelectionObject.prototype.createRangeControl=SelectionObject.prototype.createRange;
	SelectionObject.prototype.findActiveElement=function()
	{
		try {
			var allInputs = this.document.getElementsByTagName("INPUT");
			var allTAreas = this.document.getElementsByTagName("TEXTAREA");
			var l1 = allInputs.length; var l2 = allTAreas.length;
			for (var i=0; i<l1; i++) {
				var inp = allInputs[i];
				if (inp.type=="" || inp.type=="text") {
					if ((typeof(inp.selectionStart) != "undefined") && ((inp.selectionStart != 0) || (inp.selectionEnd != 0))) {
						this.activeElement = inp;
						return "text";
					}
				}
			}
			for (var i=0; i<l2; i++) {
				var inp = allTAreas[i];
				if ((typeof(inp.selectionStart) != "undefined") && ((inp.selectionStart != 0) || (inp.selectionEnd != 0))) {
					this.activeElement = inp;
					return "text";
				}
			}
		} catch (ex) {/*alert(ex.message)*/}
	};
	SelectionObject.prototype.__defineGetter__("type", function()
	{
		try
		{
			this.activeElement = false;
			var sel = false; 
			if ((""+this.document.getSelection()+"")=="")
			{ 
				this.findActiveElement(); 
				if (this.activeElement)
				{
					return "text";
				}
			}
			try { 
				sel = this.window.getSelection().getRangeAt(0);
			} catch (ex) {}
			if (sel.commonAncestorContainer.nodeName.substr(0,1)=="#") {
				return "text";
			} else {
				return "control";
			}
		} catch (ex) { }
		return "none";
	});
	SelectionObject.prototype.__defineSetter__("type", function() {
	  // Do nothing
	});
	
	// ControlRangeObject
	function ControlRangeObject() {}
	ControlRangeObject.prototype={
		"_text":"",
		"_htmlText":"",
		"_range":null,
		"parentElement":function() {
			return this.base;
		},
		"item":function(i) {
			return this.items[i];
		},
		"add":function(node) {
			try {
				this._range.insertNode(node);
			} catch (ex) {}
		},
		"execCommand":function(a1,a2,a3,a4) {
			var mode = document.designMode;
			document.designMode="on";
			document.execCommand(a1,a2,a3,a4);
			document.designMode=mode;
		}
	}
	// Properties
	ControlRangeObject.prototype.__defineGetter__("text",function() {
		return this._text;
	});
	ControlRangeObject.prototype.__defineSetter__("text",function(value) {
		if (this.isControlRange) {
			var range = this._range;
			var p=document.createTextNode(value);
			range.deleteContents();
			range.insertNode(p)
		} else {
			var beforeText = this.base.value.substr(0, this.base.selectionStart);
			var middleText = value;
			var afterText  = this.base.value.substr(this.base.selectionEnd);
			this.base.value = beforeText+middleText+afterText;
			this.base.selectionStart = this.beforeText.length;
			this.base.selectionEnd   = this.base.selectionStart + value.length;
		}
	});
	ControlRangeObject.prototype.__defineGetter__("htmlText",function() {
		return this._htmlText
	});
	ControlRangeObject.prototype.__defineSetter__("htmlText",function(value) {
		var range = this._range;
		var p=document.createElement("htmlSection");
		p.innerHTML=value;
		range.deleteContents();
		range.insertNode(p)
	});
	if (!document.selection) { document.selection=new SelectionObject(); }
	
	function getHTMLOfSelection (window, document) {
	  var range;
	  if (window.ActiveXObject && document.selection && document.selection.createRange) {
		range = document.selection.createRange();
		return range.htmlText;
	  }
	  else if (window.getSelection) {
		var selection = window.getSelection();
		if (selection.rangeCount > 0) {
		  range = selection.getRangeAt(0);
		  var clonedSelection = range.cloneContents();
		  var div = document.createElement('div');
		  div.appendChild(clonedSelection);
		  return div.innerHTML;
		}
		else {
		  return '';
		}
	  }
	  else {
		return '';
	  }
	}
}


function xgetSelection()
{
	/*if (window.getSelection)
	{
		selection = window.getSelection();
		var value = selection.anchorNode.parentNode.innerHTML;
		anc = selection.anchorNode;
		foc = selection.focusNode;
		var start = selection.anchorOffset;
		var len = (anc.parentNode.innerHTML.length - (foc.length - selection.focusOffset + start));

		value = value.substr(start, len);
		alert(value);
	}
	else if (document.getSelection)
	{
		alert(document.getSelection());
	}*/
	if (document.selection)
	{
		/*alert("HTML: " + document.selection.createRange().htmlText);
		alert("TEXT: " + document.selection.createRange().text);*/
		return document.selection.createRange().htmlText;
	}
}