text: /*
  	Copyright (c) 2004-2006, The Dojo Foundation
  	All Rights Reserved.
  
  	Licensed under the Academic Free License version 2.1 or above OR the
  	modified BSD license. For more information on Dojo licensing, see:
  
  		http://dojotoolkit.org/community/licensing.shtml
  */
  
  
  
  dojo.require("dojo.html.common");
  dojo.provide("dojo.html.selection");
  dojo.require("dojo.dom");
  dojo.require("dojo.lang.common");
  dojo.html.selectionType = {NONE:0, TEXT:1, CONTROL:2};
  dojo.html.clearSelection = function () {
  	var _window = dojo.global();
  	var _document = dojo.doc();
  	try {
  		if (_window["getSelection"]) {
  			if (dojo.render.html.safari) {
  				_window.getSelection().collapse();
  			} else {
  				_window.getSelection().removeAllRanges();
  			}
  		} else {
  			if (_document.selection) {
  				if (_document.selection.empty) {
  					_document.selection.empty();
  				} else {
  					if (_document.selection.clear) {
  						_document.selection.clear();
  					}
  				}
  			}
  		}
  		return true;
  	}
  	catch (e) {
  		dojo.debug(e);
  		return false;
  	}
  };
  dojo.html.disableSelection = function (element) {
  	element = dojo.byId(element) || dojo.body();
  	var h = dojo.render.html;
  	if (h.mozilla) {
  		element.style.MozUserSelect = "none";
  	} else {
  		if (h.safari) {
  			element.style.KhtmlUserSelect = "none";
  		} else {
  			if (h.ie) {
  				element.unselectable = "on";
  			} else {
  				return false;
  			}
  		}
  	}
  	return true;
  };
  dojo.html.enableSelection = function (element) {
  	element = dojo.byId(element) || dojo.body();
  	var h = dojo.render.html;
  	if (h.mozilla) {
  		element.style.MozUserSelect = "";
  	} else {
  		if (h.safari) {
  			element.style.KhtmlUserSelect = "";
  		} else {
  			if (h.ie) {
  				element.unselectable = "off";
  			} else {
  				return false;
  			}
  		}
  	}
  	return true;
  };
  dojo.html.selectElement = function (element) {
  	dojo.deprecated("dojo.html.selectElement", "replaced by dojo.html.selection.selectElementChildren", 0.5);
  };
  dojo.html.selectInputText = function (element) {
  	var _window = dojo.global();
  	var _document = dojo.doc();
  	element = dojo.byId(element);
  	if (_document["selection"] && dojo.body()["createTextRange"]) {
  		var range = element.createTextRange();
  		range.moveStart("character", 0);
  		range.moveEnd("character", element.value.length);
  		range.select();
  	} else {
  		if (_window["getSelection"]) {
  			var selection = _window.getSelection();
  			element.setSelectionRange(0, element.value.length);
  		}
  	}
  	element.focus();
  };
  dojo.html.isSelectionCollapsed = function () {
  	dojo.deprecated("dojo.html.isSelectionCollapsed", "replaced by dojo.html.selection.isCollapsed", 0.5);
  	return dojo.html.selection.isCollapsed();
  };
  dojo.lang.mixin(dojo.html.selection, {getType:function () {
  	if (dojo.doc()["selection"]) {
  		return dojo.html.selectionType[dojo.doc().selection.type.toUpperCase()];
  	} else {
  		var stype = dojo.html.selectionType.TEXT;
  		var oSel;
  		try {
  			oSel = dojo.global().getSelection();
  		}
  		catch (e) {
  		}
  		if (oSel && oSel.rangeCount == 1) {
  			var oRange = oSel.getRangeAt(0);
  			if (oRange.startContainer == oRange.endContainer && (oRange.endOffset - oRange.startOffset) == 1 && oRange.startContainer.nodeType != dojo.dom.TEXT_NODE) {
  				stype = dojo.html.selectionType.CONTROL;
  			}
  		}
  		return stype;
  	}
  }, isCollapsed:function () {
  	var _window = dojo.global();
  	var _document = dojo.doc();
  	if (_document["selection"]) {
  		return _document.selection.createRange().text == "";
  	} else {
  		if (_window["getSelection"]) {
  			var selection = _window.getSelection();
  			if (dojo.lang.isString(selection)) {
  				return selection == "";
  			} else {
  				return selection.isCollapsed || selection.toString() == "";
  			}
  		}
  	}
  }, getSelectedElement:function () {
  	if (dojo.html.selection.getType() == dojo.html.selectionType.CONTROL) {
  		if (dojo.doc()["selection"]) {
  			var range = dojo.doc().selection.createRange();
  			if (range && range.item) {
  				return dojo.doc().selection.createRange().item(0);
  			}
  		} else {
  			var selection = dojo.global().getSelection();
  			return selection.anchorNode.childNodes[selection.anchorOffset];
  		}
  	}
  }, getParentElement:function () {
  	if (dojo.html.selection.getType() == dojo.html.selectionType.CONTROL) {
  		var p = dojo.html.selection.getSelectedElement();
  		if (p) {
  			return p.parentNode;
  		}
  	} else {
  		if (dojo.doc()["selection"]) {
  			return dojo.doc().selection.createRange().parentElement();
  		} else {
  			var selection = dojo.global().getSelection();
  			if (selection) {
  				var node = selection.anchorNode;
  				while (node && node.nodeType != dojo.dom.ELEMENT_NODE) {
  					node = node.parentNode;
  				}
  				return node;
  			}
  		}
  	}
  }, getSelectedText:function () {
  	if (dojo.doc()["selection"]) {
  		if (dojo.html.selection.getType() == dojo.html.selectionType.CONTROL) {
  			return null;
  		}
  		return dojo.doc().selection.createRange().text;
  	} else {
  		var selection = dojo.global().getSelection();
  		if (selection) {
  			return selection.toString();
  		}
  	}
  }, getSelectedHtml:function () {
  	if (dojo.doc()["selection"]) {
  		if (dojo.html.selection.getType() == dojo.html.selectionType.CONTROL) {
  			return null;
  		}
  		return dojo.doc().selection.createRange().htmlText;
  	} else {
  		var selection = dojo.global().getSelection();
  		if (selection && selection.rangeCount) {
  			var frag = selection.getRangeAt(0).cloneContents();
  			var div = document.createElement("div");
  			div.appendChild(frag);
  			return div.innerHTML;
  		}
  		return null;
  	}
  }, hasAncestorElement:function (tagName) {
  	return (dojo.html.selection.getAncestorElement.apply(this, arguments) != null);
  }, getAncestorElement:function (tagName) {
  	var node = dojo.html.selection.getSelectedElement() || dojo.html.selection.getParentElement();
  	while (node) {
  		if (dojo.html.selection.isTag(node, arguments).length > 0) {
  			return node;
  		}
  		node = node.parentNode;
  	}
  	return null;
  }, isTag:function (node, tags) {
  	if (node && node.tagName) {
  		for (var i = 0; i < tags.length; i++) {
  			if (node.tagName.toLowerCase() == String(tags[i]).toLowerCase()) {
  				return String(tags[i]).toLowerCase();
  			}
  		}
  	}
  	return "";
  }, selectElement:function (element) {
  	var _window = dojo.global();
  	var _document = dojo.doc();
  	element = dojo.byId(element);
  	if (_document.selection && dojo.body().createTextRange) {
  		try {
  			var range = dojo.body().createControlRange();
  			range.addElement(element);
  			range.select();
  		}
  		catch (e) {
  			dojo.html.selection.selectElementChildren(element);
  		}
  	} else {
  		if (_window["getSelection"]) {
  			var selection = _window.getSelection();
  			if (selection["removeAllRanges"]) {
  				var range = _document.createRange();
  				range.selectNode(element);
  				selection.removeAllRanges();
  				selection.addRange(range);
  			}
  		}
  	}
  }, selectElementChildren:function (element) {
  	var _window = dojo.global();
  	var _document = dojo.doc();
  	element = dojo.byId(element);
  	if (_document.selection && dojo.body().createTextRange) {
  		var range = dojo.body().createTextRange();
  		range.moveToElementText(element);
  		range.select();
  	} else {
  		if (_window["getSelection"]) {
  			var selection = _window.getSelection();
  			if (selection["setBaseAndExtent"]) {
  				selection.setBaseAndExtent(element, 0, element, element.innerText.length - 1);
  			} else {
  				if (selection["selectAllChildren"]) {
  					selection.selectAllChildren(element);
  				}
  			}
  		}
  	}
  }, getBookmark:function () {
  	var bookmark;
  	var _document = dojo.doc();
  	if (_document["selection"]) {
  		var range = _document.selection.createRange();
  		bookmark = range.getBookmark();
  	} else {
  		var selection;
  		try {
  			selection = dojo.global().getSelection();
  		}
  		catch (e) {
  		}
  		if (selection) {
  			var range = selection.getRangeAt(0);
  			bookmark = range.cloneRange();
  		} else {
  			dojo.debug("No idea how to store the current selection for this browser!");
  		}
  	}
  	return bookmark;
  }, moveToBookmark:function (bookmark) {
  	var _document = dojo.doc();
  	if (_document["selection"]) {
  		var range = _document.selection.createRange();
  		range.moveToBookmark(bookmark);
  		range.select();
  	} else {
  		var selection;
  		try {
  			selection = dojo.global().getSelection();
  		}
  		catch (e) {
  		}
  		if (selection && selection["removeAllRanges"]) {
  			selection.removeAllRanges();
  			selection.addRange(bookmark);
  		} else {
  			dojo.debug("No idea how to restore selection for this browser!");
  		}
  	}
  }, collapse:function (beginning) {
  	if (dojo.global()["getSelection"]) {
  		var selection = dojo.global().getSelection();
  		if (selection.removeAllRanges) {
  			if (beginning) {
  				selection.collapseToStart();
  			} else {
  				selection.collapseToEnd();
  			}
  		} else {
  			dojo.global().getSelection().collapse(beginning);
  		}
  	} else {
  		if (dojo.doc().selection) {
  			var range = dojo.doc().selection.createRange();
  			range.collapse(beginning);
  			range.select();
  		}
  	}
  }, remove:function () {
  	if (dojo.doc().selection) {
  		var selection = dojo.doc().selection;
  		if (selection.type.toUpperCase() != "NONE") {
  			selection.clear();
  		}
  		return selection;
  	} else {
  		var selection = dojo.global().getSelection();
  		for (var i = 0; i < selection.rangeCount; i++) {
  			selection.getRangeAt(i).deleteContents();
  		}
  		return selection;
  	}
  }});
  
  