var d = document, setel, heightRef = letterCount = 0, truncdbg = 0;
// jimmont @ 2006 Jan
function truncate(){
/* Send me a list of items to truncate: the items in the list must have a
height (auto) that reflects the height of the copy ie. it cannot be clipped 
by this element (but it can be clipped by another container).
works with: moz 1.7; ie 6/5.5; safari 1.3; no errors with IE5; 
font-size in mozilla/ff may adversely affect truncation (unconfirmed)
*/
if(!arguments.length) return;
//if(d.all && !d.mimeType && !window.opera) return; // skip IEmac
if(d.all && !d.fireEvent && !window.opera) return; // skip IE5
var els = (typeof arguments[0].length == 'number')? arguments[0]:[arguments[0]];
if(!els.length) return;
for(var ct = 0;ct<els.length;ct++){
	if(typeof setel != 'undefined' && els[ct] == setel)continue;
	truncator(els[ct]);
	}
}

	function trim(str){
var str = str.replace(/\.{3}$/, '');
// compile the regex to avoid probs with ie5/ie5mac
//var pat = new RegExp("\\b\\w+?[^\\w]?.?$");
var pat = new RegExp("\\b\\w+?.?$");
str = str.substring(0, str.length - 6);
str = str.replace(pat, '');
//str = str.replace(/\b\w+?[^\w]?.?$/, '');
return str+'...';
	}

	function truncator(el){
var el = (typeof el == 'object')? el:((typeof el == 'string')? d.getElementById(el):null);
if(!el)return;
	// build a baseline height size and character count
if(!heightRef) {
// hidden el
setel = d.createElement(el.nodeName);
setel.id = 'setter'+(new Date()).getTime();
if(el.className) setel.className = el.className;
setel.style.position = 'absolute';
setel.style.width = el.offsetWidth+'px';
setel.style.top = setel.style.left = (truncdbg)? '150px':('-'+(el.offsetWidth+500)+'px');
setel.style.visibility = (truncdbg)? 'visible':'hidden';
if(!setel.innerHTML) el.parentNode.appendChild(setel);
setel.innerHTML = 'line1<br />line2';
heightRef = setel.offsetHeight;
var word = 'lmrlen lip'; // safari trims spaces off the end!
setel.innerHTML = word;
var singlelineheight = setel.offsetHeight;
singlelineheight = (heightRef - singlelineheight);

var m = 0;
do{
if(m>35) break; m++;
letterCount = setel.innerHTML.length;
setel.innerHTML += word;
}while(setel.offsetHeight <= heightRef);
	}

	// operate on current el
setel.innerHTML = el.innerHTML;
if(setel.offsetHeight > heightRef){
setel.innerHTML = (setel.innerHTML.substring(0, letterCount-10)).replace(/\s.?$/, '')+'...';
var m = 0;
do{
setel.innerHTML = trim(setel.innerHTML);
if(m > 15) break;
m++;
}while(setel.offsetHeight > heightRef);
el.innerHTML = setel.innerHTML;
	}

	}
