/****************************************************************************
* 																			*
* HW Javascript UI.TabSet Module											*
* ------------------------------											*
* 																			*
* Author:			Leonard Martin (leonard.martin@heathwallace.com)		*
* Version:			0.1.0													*
* Updated:			3 June 2008												*
* 																			*
* **************************************************************************/

if(!HW.UI) {
	HW.UI = {};
}

/*
--- UI.TABSET FUNCTIONS ---
Requires:	Core
CSS:		None
---------------------------
*/

/*
* HW.UI.TabSet(list,panel,opts) 
* converts a text input into a slider element
* o:		The text field to convert
* opts:		A Slider.Options object containing the setup paramters for the Slider
* Returns:	Self
*/
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.change();
	
	this.options.backButton = this.options.backButton && !window.opera
	
	if(this.options.backButton) {
		var obj = this;
		this.int = setInterval(function() {obj.checkTab();},10);
	}
}

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 = $$(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(self.location.hash == this.links[i].hash) {
				this.state = i;
			}			
		}
	},
	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:''});
//BB		this.links[n].blur();
	},
	checkTab:function() {
		if(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
}

/*
--- END UI.TABSET FUNCTIONS ---
*/