function Slide(){}
Slide.prototype.show = function(targetId,speed){
    if (slideHashMap.contains(targetId))return;
    var slideObj = new SlideObj(targetId,speed);
    if (!slideObj.t)return;
    slideHashMap.set(targetId,'');
	if (slideObj.t.style.overflow != 'hidden')slideObj.t.style.overflow = 'hidden';
	if (slideObj.t.style.visibility != 'visible')slideObj.t.style.visibility = 'visible';
	var initHeight = slideObj.t.style.height;
	if (!initHeight)initHeight = '0px';
	//t.style.height = '';
	//var destHeight = t.offsetHeight;
	slideObj.t.style.height = initHeight;
	slideObj.destHeight = slideObj.t.scrollHeight;
//	this.expand(this,slideObj)();
	slideObj.pid = setInterval(this.expand(this,slideObj), 30);
};
Slide.prototype.afterShow = null;
Slide.prototype.hide = function(targetId,speed){
    if (slideHashMap.contains(targetId))return;
    var slideObj = new SlideObj(targetId,speed);
    if (!slideObj.t)return;
    slideHashMap.set(targetId,'');
	if (slideObj.t.style.overflow != 'hidden')slideObj.t.style.overflow = 'hidden';
	var initHeight = slideObj.t.style.height;
	if (!initHeight)initHeight = slideObj.t.scrollHeight;
	slideObj.destHeight = 0;
	slideObj.t.style.height = parseInt(initHeight) + 'px';
//	this.collapse(this,slideObj)();
	slideObj.pid = setInterval(this.collapse(this,slideObj), 30);
};
Slide.prototype.afterHide = null;
Slide.prototype.expand = function(_this,obj){
	return function(){
		var h = parseInt(obj.t.style.height);
		if (!h)h = obj.speed;
		else h += obj.speed;
		if (h >= obj.destHeight){
			h = obj.destHeight;
			clearInterval(obj.pid);
            slideHashMap.remove(obj.targetId);
            if (typeof(_this.afterShow) == "function")
                _this.afterShow();
		}
		obj.t.style.height = h + 'px';
	}
};
Slide.prototype.collapse = function(_this,obj){
	return function(){
		var h = parseInt(obj.t.style.height);
		h -= obj.speed;
		if (h <= 0){
			h = 0;
			clearInterval(obj.pid);
			obj.t.style.visibility = 'hidden';
            slideHashMap.remove(obj.targetId);
            if (typeof(_this.afterHide) == "function")
                _this.afterHide();
		}
		obj.t.style.height = h + 'px';
	}
};
function SlideObj(targetId,speed){
    this.targetId = targetId;
    this.t = document.getElementById(targetId);
    this.pid = null;
	this.destHeight = 0;
	this.speed = speed || 20;
}
var slideHashMap = {
    set : function(key,value){this[key] = value},
    get : function(key){return this[key]},
    contains : function(key){return this.get(key) != null},
    remove : function(key){delete this[key]}
};