/**
* TAB CONTROL
*
* Requirements:
* All tabs in a set must be of the same type (i.e. links, buttons, labels, list items etc)
* All tabs in a set must be at the same level in the DOM - must have the same parent tag
* Each set of tabs should be wrapped in a tag (i.e div, span, p) for better performance
* The 'wrapper' tag shouldn't contain any other elements of the same type with the tabs (at the same level in the DOM)
*
* How it works:
*
* Naming Conventions:
* Tab Contents ID = Button ID + '_tab' (see suffix below);
* Example: For the 'help' tab button, 'help_tab' is the actual contents of the tab
*
* Parameters:
* e  mixed   element ID or event
*/

var g_tab_id_suffix = '_tab';
var g_cls_default 	= 'default';
var g_cls_selected 	= 'selected';
var g_cls_collapsed = 'collapsed';
var g_cls_expanded 	= 'expanded';

function gui_tab(e)
{
	
	var tab_btn = false;
	
	switch(typeof(e)) {
		case 'string' : tab_btn = id(e); break;
		default : tab_btn = window.event ? window.event.srcElement : e ? e.target : null; break;
	}

    if (!tab_btn || tab_btn == null) return;
	
	var tab_btn_id_list = new Array();
	var style_tab_btn = true;
	var style_parent = false;

	var parent = tab_btn.parentNode;
	if(parent.tagName == 'LI') {
		parent = parent.parentNode;
		style_parent = true;
		style_tab_btn = false;
	}

	// select | unselect labels (radio boxes only)
	if(tab_btn.type == 'radio' && style_parent == false) {
		style_tab_btn = false;
		var label_list = tab_btn.parentNode.getElementsByTagName('label');
		for(var i=0; i<label_list.length; i++) {
			if (label_list[i].getAttributeNode('for') && label_list[i].getAttributeNode('for').value == tab_btn.id) {
				label_list[i].className = g_cls_selected;
			} else {
				label_list[i].className = g_cls_default;
			}
		}
	}

	// display | hide tab contents
	tab_btn_id_list = parent.getElementsByTagName(tab_btn.tagName);
	for(var i=0; i<tab_btn_id_list.length; i++) {

		var tab_id = tab_btn_id_list[i].id + g_tab_id_suffix;
		var tab = id(tab_id);

		if(tab_btn_id_list[i].id == tab_btn.id) {

			if(tab != null) {
				tab.className = g_cls_expanded;
			}
			if(style_tab_btn) {
				tab_btn_id_list[i].className = g_cls_selected;
			}
			if(style_parent) {
				tab_btn_id_list[i].parentNode.className = g_cls_selected;
			}
		} else {

			if(tab != null) {
				tab.className = g_cls_collapsed;
			}
			if(style_tab_btn) {
				tab_btn_id_list[i].className = g_cls_default;
			}
			if(style_parent) {
				tab_btn_id_list[i].parentNode.className = g_cls_default;
			}
		}
	}
	
	return true;
}
