/** 
* Copyright 2005 massimocorner.com
* JavaScript library for the "tab" ColdFusion custom tag
* @author      Massimo Foti (massimo@massimocorner.com)
* @version     1.0, 2005-12-11
 */
 
function tmt_tabSwitch(tab, cssClass){
	var tabsContainer = tab.parentNode;
	var tabs = tabsContainer.getElementsByTagName("a");
	var tabPanels = tmt_tabGetPanels(tabsContainer.parentNode);
	var selectedTabIndex;
	for(var i=0; i<tabs.length; i++){
		if(tabs[i] == tab){
			// Store the index of the currentely selected tab
			selectedTabIndex = i;
			tmt_tabAppendClass(tab, cssClass);
			as_setStatusCookie(selectedTabIndex,tabsContainer.parentNode.className);
		}
		else{
			tmt_tabRemoveClass(tabs[i], cssClass);
		}
	}
	for(var j=0; j<tabPanels.length; j++){
		// Show the selected tab, hide the rest
		tabPanels[j].style.display = (j == selectedTabIndex) ? "block" : "none";
	}
	tabsContainer.style.display = 'block';
}

function tmt_tabGetPanels(tabGroupNode){
	var panelsNodes = new Array();
	var divNodes = tabGroupNode.getElementsByTagName("div");
	for(var i=0; i<divNodes.length; i++){
		if(divNodes[i].className == "tmtPanel"){
			panelsNodes[panelsNodes.length] = divNodes[i];
		}
	}
	return panelsNodes;
}

function tmt_tabAppendClass(theNode, cssClass){
	if(theNode.className.indexOf(cssClass) == -1){
		theNode.className = theNode.className + " " + cssClass;
	}
}

function tmt_tabRemoveClass(theNode, cssClass){
	var regClass = new RegExp("\\b" + cssClass);
	theNode.className = theNode.className.replace(cssClass, "");
}

// status handling
function as_setStatusCookie(selectedTabIndex,tabsContainerClassName){
	document.cookie= "selectedTabIndex = " + selectedTabIndex;
	document.cookie= "tabsContainerClassName = " + tabsContainerClassName;
}

function setTabFromQueryString(selectedTabIndex){
	/* 
	if using the url tab method then we cannot know the class of the 
	div container so assume it to be the default container name e.g. tmtTabGroup
	*/
	var tabContainer = getElementsByClassName(document,"div","tmtTabGroup");
	
	if(tabContainer.length==1){
		var tabs = getElementsByClassName(tabContainer[0],"a","tmtTab");
		var selectedTab = tabs[selectedTabIndex-1];
		if (selectedTab){
			tmt_tabSwitch(selectedTab,'tmtTabselected');
		}else{
			defaultDisplay();
		}
	}else{
		defaultDisplay();
	}
}

function setTabFromCookie(){
	//query string tab takes precedence over cookie
	if (getQueryVariable("tab")){
		setTabFromQueryString(getQueryVariable("tab"));
	}
	else if(getCookie("selectedTabIndex")){
		var selectedTabIndex=getCookie("selectedTabIndex");
		var tabsContainerClassName=getCookie("tabsContainerClassName");
		var tabContainer = getElementsByClassName(document,"div",tabsContainerClassName);
		//if more than one div with this class name then bail. developer should give addition tmtTabGroups a distinct class container name
		if(tabContainer.length==1){
			var tabs = getElementsByClassName(tabContainer[0],"a","tmtTab");
			var selectedTab = tabs[selectedTabIndex];
			if (selectedTab){
				tmt_tabSwitch(selectedTab,'tmtTabselected');
			}
		}
	// no cookies for these tabs so display them with default
	}else{
		defaultDisplay();
	}
}
// if none of the ad hoc functions are invoked then display the default tabs
function defaultDisplay(){
	var tabContainer = getElementsByClassName(document,"div","tmtTabs");
	for(var i=0; i<tabContainer.length; i++){
		tabContainer[i].style.display = 'block';
	}
	// and same thing for form tabs, form bodies and submit -- to prevent users pressing before form has completely loaded
	var tabContainer = getElementsByClassName(document,"div","tmtFormTabs");
	for(var i=0; i<tabContainer.length; i++){
		tabContainer[i].style.display = 'block';
	}
	var tabContainer = getElementsByClassName(document,"div","tmtFormPanelGroup");
	for(var i=0; i<tabContainer.length; i++){
		tabContainer[i].style.display = 'block';
	}	
	var tabContainer = getElementsByClassName(document,"div","fot1f");
	for(var i=0; i<tabContainer.length; i++){
		tabContainer[i].style.display = 'block';
	}		
	
}

// add the event to read cookie and set tab on page load 
addEvent(window, "load", setTabFromCookie);
