﻿
// 문자열 길이 처리
function cutOverflowContent(node, tailStr) {
	var lastLeft = 0;
	var tail = document.createElement('span');
	tail.appendChild( document.createTextNode(tailStr) );
	var breaked = false;
	
	function traverse(node) {
		if ( node.nodeType == 3 ) {
			return traverseForText(node);
		} else {
			return traverseForElement(node);
		}
	}
	
	function traverseForText(node) {
		var text = node.nodeValue;
		node.nodeValue = '';
		for( var i = 0; i < text.length; i++ ) {
			node.nodeValue += text.charAt(i);
			if ( tail.offsetLeft < lastLeft ) {
				node.nodeValue = text.substr(0, i);
				return false;
			}
			lastLeft = tail.offsetLeft;
		}
		return true;
	}
	
	function traverseForElement(node) {
		var fragment = document.createDocumentFragment();
		
		while( node.firstChild ) {
			fragment.appendChild( node.firstChild );
		}
		
		while( fragment.firstChild ) {
			var child = fragment.firstChild;
			node.appendChild( child );
			if ( !traverse( child ) ) {
				while( fragment.firstChild ) {
					fragment.removeChild( fragment.firstChild );
				}
				return false;
			}
		} 
		return true;
	}
	
	var fragment = document.createDocumentFragment();
		
	while( node.firstChild ) {
		fragment.appendChild( node.firstChild );
	}
	
	node.appendChild( tail );
	
	while( fragment.firstChild ) {
		var child = fragment.firstChild;
		node.insertBefore( child, tail );
		if ( !traverse( child ) ) {
			breaked = true;
			break;
		}
	}
	
	while( fragment.firstChild ) {
		fragment.removeChild( fragment.firstChild );
	}
	
	if ( !breaked ) {
		node.removeChild( tail );
	}
}