var truncDimention = function ( element, maxWidth, maxHeight ) {
	this.element = element;
	this.maxWidth = maxWidth;
	this.maxHeight = maxHeight;
	this.element.style.width = this.maxWidth + 'px';
	return this;
};
truncDimention.prototype.setValue = function ( str ) {
	this.element.innerHTML = '';
	this.element.title = str;
	this.createRuler();
	var s = this.truncate( str ), c;
	while ( c = this.element.lastChild ) this.element.removeChild(c);
	this.element.appendChild( document.createTextNode(s) );
	this.ruler.parentNode.removeChild( this.ruler );
};
truncDimention.prototype.createRuler = function () {
	this.ruler = this.element.parentNode.insertBefore( document.createElement('SPAN'), this.element );
	this.ruler.style.visibility = 'hidden';
	this.ruler.style.position = 'absolute';
	this.ruler.style.width = this.maxWidth + 'px';
};
truncDimention.prototype.getExtent = function ( str ) {
	var c;
	while ( c = this.ruler.lastChild ) this.ruler.removeChild(c);
	var t = this.ruler.appendChild( document.createTextNode( str ) );
	var dim = [ this.ruler.offsetWidth, this.ruler.offsetHeight ];
	this.ruler.removeChild(t);
	return dim;
};
truncDimention.prototype.truncate = function ( str ) {
	if ( str.length == 0 ) return '';
	var dim = this.getExtent( str );
	if ( dim[0] <= this.maxWidth && dim[1] <= this.maxHeight ) return str;
	for ( var i = str.length - 1; i >= 1; --i ) {
		var s = str.slice(0,i) + '...';
		var dim = this.getExtent(s);
		if ( dim[0] <= this.maxWidth && dim[1] <= this.maxHeight ) return s;
	}
	return '';
};

