if(Df){
}else{
	var Df = {}
}

Df.Tabset = function(el){
	//BEGIN constructor
	var ele = this.ele = $(el)
	
	var pars = this.pars = {
		animate: false,
		pause:0,
		activeClassName: 'active',
		eventType: 'click',
		onDisplay: false,
		onHide: false,
		scrollbars: false
	}
	
	var def, animation, scrollbars;
	var displayStatus = "closed";
	var status = false;
	
	this.version = function(){
		return 1.0;
	}
	
	this.requires = function(){
		return [
			'/js/Df.js',
			'/js/prototype1_6.js',
			'/js/prototype1_6_extend.js',
			'/js/Df.Animate.js'
			];
	}
	
	this.set = function(para){
		if(para){
			pars = Object.extend(pars,para)
		}
		
		def = ele.next('dd',0);
		
		if(pars.scrollbars){
			scrollbars = new Df.Scrollbar(def);
			if(pars.scrollbars.constructor == Boolean){
				pars.scrollbars = {}
			}	
			scrollbars.set(pars.scrollbars,function(ins){
				if(ins.getElements().y.holder){
					ins.getElements().y.holder.style.display = 'none'
				}
			});
		}
		
		if(pars.animate){
			animation = new Df.Animate(def);
			if(pars.animate){
				animation.pars = Object.extend(animation.pars,pars.animate);
			}
		}
		
		if(pars.eventType == 'click'){
			Event.observe(ele, 'click', activate ,false);
		}
		else if(pars.eventType == 'hover'){
			
			Event.observe(ele, 'mouseover', activate ,false)
		
			Event.observe(ele, 'mouseout', function(){
				status = false;
			},false)
			
		}
	}
	
	this.getState = function(){
		return displayStatus;
	}
	
	var activate = this.activate = function(event){
		status = true;
		setTimeout(waitToActivate,pars.pause);
	}
	
	var display = this.display = function(){
		
		if(displayStatus=='closed'){
		
			displayStatus = "open";
			
			def.style.visibility = "visible";
			
			if(pars.activeClassName){
				ele.addClassName(pars.activeClassName)
			}
			
			if(animation){
				if(animation.getHistoryCount() == 0){
					animation.run();	
				}else{
					animation.last();
				}
			}
			
			if(scrollbars){
				var xholder = scrollbars.getElements().y.holder;
				if(xholder){
					xholder.style.display = "block";
				}
			}
			
			if(pars.onDisplay){
				pars.onDisplay(ele);
			}
		}
	}
	
	var hide = this.hide = function(){
		
		displayStatus = "closed";
		
		if(animation){
			if(animation.getHistoryCount() > 0){
				animation.first({onComplete: function(){
						finishHide();
					}
				});
			}
		}else{
			finishHide();
		}
	}
	
	var finishHide = function(){
		def.style.visibility = "hidden";
			
		if(pars.activeClassName){
			ele.removeClassName(pars.activeClassName)
		}
		
		if(scrollbars){
			var xholder = scrollbars.getElements().y.holder;
			if(xholder){
				xholder.style.display = "none";
			}
		}
		
		if(pars.onHide){
			pars.onHide(ele);
		}
	}
	
	var waitToActivate = this.waitToActivate = function(){
		
		if(status){
			
			var elem = ele.siblings();
			
			for(var i=0; i<elem.length; i++){
				if((elem[i].tagName == "DT" || elem[i].tagName == "dt") && elem[i].df.tabset.getState() == 'open'){
					elem[i].df.tabset.hide();
				}
			}
			
			if(displayStatus == "closed"){
				display();
			}
		}
	}
}
