function DivExpander() {
	for(var i=0; window['__divExpander'+i]; i++);
	this.objName='window.__divExpander'+i;
	eval(this.objName+'=this');
	this.timeouts={};
	this.heights={};
	this._id=function(elem) { return '_'+elem.id; };
	this.timeout=function(_id) {
		this.shrink(this.timeouts[_id].elem);
		delete(this.timeouts[_id]);
	};
	this.setTimeout=function(elem) {
		var _id=this._id(elem);
		this.timeouts[_id]={elem:elem, timeout:window.setTimeout(this.objName+'.timeout(\''+_id+'\')', 500)}
	};
	this.clearTimeout=function(elem) {
		var _id=this._id(elem);
		if(this.timeouts[_id]) {
			window.clearTimeout(this.timeouts[_id].timeout);
			delete(this.timeouts[_id]);
		}
	};
	this.expand=function(elem) {
		var _id=this._id(elem);
		if(elem && !this.heights[_id]) {
			this.heights[_id]=elem.style.height;
			elem.style.height='auto';
		}
	};
	this.shrink=function(elem) {
		var _id=this._id(elem);
		if(elem && this.heights[_id]) {
			elem.style.height=this.heights[_id];
			delete(this.heights[_id]);
		}
	};
	this.mouseOver=function(elem) {
		for(var _id in this.timeouts) with(this.timeouts[_id]) {
			this.clearTimeout(elem);
			this.shrink(elem);
		}
		this.expand(elem);
	};
	this.mouseOut=function(elem) {
		this.setTimeout(elem);
	};
	return this;
}
