var INC_STEP = 2;
var STEP_SLEEP = 50;

function riseTo(wrapper, to, step) {
	step = parseInt(step);
	if (wrapper.offsetHeight + step > to){
		wrapper.style.height = 'auto';
		wrapper.isCollapsed = false;
	} else {
		wrapper.style.height = (wrapper.offsetHeight + step) + 'px';
		setTimeout(function(wrapper, to, step){return function(){riseTo(wrapper, to, step);}}(wrapper, to, step+INC_STEP), STEP_SLEEP);
	}
}

function fade(wrapper, step) {
	step = parseInt(step);
	if (wrapper.offsetHeight - step < 0){
		wrapper.style.height = '0px';
		wrapper.style.display = 'none';
		wrapper.isCollapsed = true;
	} else {
		wrapper.style.height = (wrapper.offsetHeight - step) + 'px';
		setTimeout(function(wrapper, step){return function(){fade(wrapper, step);}}(wrapper, step+INC_STEP), STEP_SLEEP);
	}
}

function toggleFieldset(el) {
	var wrap = null;
	if (!el.parentNode.isWrapper) {
		// not wrapped yet. Wrap
		wrap = document.createElement('DIV');
		wrap.isWrapper = true;
		wrap.isCollapsed = el.style.display=='none' || el.offsetHeight==0;
		wrap.style.overflow = 'hidden';
		el.parentNode.insertBefore(wrap, el);
		wrap.appendChild(el);
	}
	wrap = el.parentNode;
	if (wrap.isCollapsed==true) {
		el.style.display = 'block';
		wrap.style.height = '0px';
		wrap.style.display = 'block';
		riseTo(wrap, el.offsetHeight, 0);
	} else {
		fade(wrap, 0); 
	}
}


