if(!HW.UI) {
	HW.UI = {};
}

HW.UI.TabSet = function(list,panel,opts) {
	
	this.options = new HW.UI.TabSet.Options();
	this.options = HW.extendObject(this.options,opts);
	
	this.list = list;
	this.panel = panel;
	
	this.getLinks();
	this.getContent();
	this.getInitialState();
	
	this.options.backButton = this.options.backButton && !window.opera
	
	if(this.options.backButton) {
		var obj = this;
		this.int = setInterval(function() {obj.checkTab();}, 200);
	}
}

HW.UI.TabSet.prototype = {
	links:[],
	content:[],
	state:0,
	getLinks:function() {
		var obj = this;
		
		this.links = [];
		if(this.list) {
			var elms = this.list.getElementsByTagName('a');
			for(var i=0,j=elms.length;i<j;i++) {
				this.links.push(elms[i]);
				(function() {
					var k=i;
					var link = elms[i];
					HW.attachEvent(link,'click',function(e) {HW.preventDefault(e);obj.change(k,link);});
				})()
			}
		}
	},
	getContent:function() {
		this.content = [];
		if(this.panel) {
			var elms = hw$$(this.options.content,this.panel,'div');
			for(var i=0,j=elms.length;i<j;i++) {
				this.content.push(elms[i]);
				HW.setStyle(elms[i],{display:'none'});
			}
		}
	},
	getInitialState:function() {
		this.state = this.options.defaultState;
		for(var i=0,j=this.links.length;i<j;i++) {
			if(this.links[i].hash != '' && self.location.hash == this.links[i].hash) {
				this.state = i; 
			}			
		}
		if('#'+this.state == self.location.hash){
			this.current = self.location.hash;
		}
	},
	change:function(n,link) {

		if(link && link.hash && this.options.backButton) {
			self.location.hash = link.hash;
			this.current = link.hash;
		}
		
		n = typeof(n)=='undefined'?this.state:n;
		
		for(var i=0,j=this.content.length;i<j;i++) {
			HW.setStyle(this.content[i],{display:'none'});
		}
		
		for(var i=0,j=this.links.length;i<j;i++) {

			var li = null, o = this.links[i];
			
			while(o && o.tagName != 'LI') {
				o = o.parentNode;
			}
						
			if(o && o.tagName == 'LI') {
				if(i != n) {
					HW.removeClass(o,this.options.highlight);
				}
				else {
					HW.addClass(o,this.options.highlight);
				}
			}
		}
		HW.setStyle(this.content[n],{display:''});
		this.links[n].blur();
	},
	checkTab:function() {
		if(self.location.hash && self.location.hash != this.current) {
			this.current = self.location.hash;
			this.getInitialState();
			this.change();
		}
	}
}

HW.UI.TabSet.Options = function() {}
HW.UI.TabSet.Options.prototype = {
	highlight:null,
	content:'contentNode',
	defaultState:0,
	backButton:true
}

