var settings = {
	length: 90,
	ellipsis: "…"
};

if (!window['Node']) {
	window.Node = new Object();
	Node.ELEMENT_NODE = 1;
	Node.ATTRIBUTE_NODE = 2;
	Node.TEXT_NODE = 3;
	Node.CDATA_SECTION_NODE = 4;
	Node.ENTITY_REFERENCE_NODE = 5;
	Node.ENTITY_NODE = 6;
	Node.PROCESSING_INSTRUCTION_NODE = 7;
	Node.COMMENT_NODE = 8;
	Node.DOCUMENT_NODE = 9;
	Node.DOCUMENT_TYPE_NODE = 10;
	Node.DOCUMENT_FRAGMENT_NODE = 11;
	Node.NOTATION_NODE = 12;
}

function ellipsis(node) {
	var stack = new Array();
	stack.push(node.firstChild);
	var remaining = settings.length;
	var child;
	var stop = false;
	while (child = stack.pop()) {
		if (child.nextSibling) {
			stack.push(child.nextSibling);
		}

		switch (child.nodeType) {
			case Node.ELEMENT_NODE:
				if (child.firstChild) {
					stack.push(child.firstChild);
				}
				break;

			case Node.TEXT_NODE:
				if (remaining - child.data.length < 0) {
					// Do the ellipsis here...
					var start = 0;
					while (start < remaining) {
						start = child.data.indexOf(' ', start + 1);
						if (start == -1) {
							start = remaining;
							//start = child.data.length;
							break;
						}
					}

					child.data = child.data.substring(0, start);
					child.data += ' ' + settings.ellipsis;
					stop = true;
				} else {
					remaining -= child.data.length;
				}
				break;
		}

		if (stop) {
			break;
		}
	}

	// Here, cut off everything else.
	if (stop) {
		// Cut off everything from current child.
		var orig_child = child;
		stack.push(child);

		while (child = stack.pop()) {
			var to_delete = false;
			if (child != orig_child) {
				to_delete = child;
			}

			var next = child.nextSibling;
			while (next) {
				child = next;
				next = child.nextSibling;
				child.parentNode.removeChild(child);
			}

			if (to_delete) {
				to_delete.parentNode.removeChild(to_delete);
			}
		}

		//node.appendChild(document.createTextNode(' ' + settings.ellipsis));
	}
}

