		/*
			This class represents a tab manager that can be used to build tabs in HTML
			Author: Richard Evans
			Date: 2008-03-17
			Version: 1
		*/
		
	function TabManager()
	{
		//private variables
		var self = this;
		var tabs = new Array();
		var selectedCSSClass = 'selectedTab';
		var deselectedCSSClass = 'tab';	
		var selectedTab;
		var tabSelectionListeners = new Array();
		
		//declare public methods
		this.selectTab = selectTab;
		this.addTab = addTab;
		this.removeTab = removeTab;
		this.getTabIndex = getTabIndex;
		this.getSelectedCSSClass = getSelectedCSSClass;
		this.setSelectedCSSClass = setSelectedCSSClass;	
		this.getDeselectedCSSClass = getDeselectedCSSClass;
		this.setDeselectedCSSClass = setDeselectedCSSClass;	
		this.getSelectedTab = getSelectedTab;
		this.addTabSelectionListener = addTabSelectionListener;
		this.removeTabSelectionListener = removeTabSelectionListener;
		this.getTabSelectionListenerIndex = getTabSelectionListenerIndex;
	
	
		//public - adds an element as a tab to the manager
		//         sets the elements tab index and tab is selected attributes
		function addTab(element)
		{		
			element.tabIndex = tabs.length;
			element.tabIsSelected = false;		
			tabs.push(element);
		}
		
		
		//public - removes the tab from the manager
		function removeTab(index)
		{
			tabs.splice(index, 1);
		}	
		
		
		//public - gets the tab index is defined, otherwise undefined returned
		function getTabIndex(element)
		{
			return element.tabIndex;	
		}
		
		
		//public - gets the css class to assign to selected tabs
		function getSelectedCSSClass()
		{
			return selectedCSSClass;
		}
		
		
		//public - sets the css class to assign to selected tabs
		function setSelectedCSSClass(selectedCSSClass1)
		{
			selectedCSSClass = selectedCSSClass1;
		}
		
		
		//public - gets the css class to assign to deselected tabs
		function getDeselectedCSSClass()
		{
			return deselectedCSSClass;		
		}
		
		
		//public - sets the css class to assign to dselected tabs
		function setDeselectedCSSClass(deselectedCSSClass1)
		{
			deselectedCSSClass = deselectedCSSClass1;		
		}
		
		
		//public - gets the selected tab element
		function getSelectedTab()
		{
			return selectedTab;
		}
		
		
		//public - deselects the selected tab, selects the element as a tab
		//         executes the onSelect script
		function selectTab(element)
		{
			if(selectedTab != null)
			{
				selectedTab.tabIsSelected = false;
				selectedTab.className = deselectedCSSClass;
			}
			selectedTab = element;
			element.tabIsSelected = true;
			element.className = selectedCSSClass;
			for(i = 0; i < tabSelectionListeners.length; i++)
			{				
				tabSelectionListeners[i].tabSelected(element, element.tabIndex, self);
			}
		}
		
		
		//public - sets the script to execute when a tab is selected
		function addTabSelectionListener(tabSelectionListener)
		{	
			tabSelectionListener.listenerIndex = tabSelectionListeners.length;
			tabSelectionListeners.push(tabSelectionListener);	
		}
		
		
		//public - removes the script  to execute when a tab is selected
		function removeTabSelectionListener(index)
		{
			tabSelectionListeners.splice(index, 1);
		}
		
		
		//public - gets the listener index is defined, otherwise undefined returned
		function getTabSelectionListenerIndex(tabSelectionListener)
		{
			return tabSelectionListener.listenerIndex;	
		}		
		
	}
	
		/*
			This class represents a tab listener that responds to selected tabs of the previous class
			Author: Richard Evans
			Date: 2008-03-17
			Version: 1
		*/	
	function TabSelectionListener()
	{
		//private variables
		var script;
		
		//declare public methods
		this.tabSelected = tabSelected;
		this.getScript = getScript;
		this.setScript = setScript;		
		
		//public - called when the selected tab is chosen
		//         the script can use the variables element and index
		function tabSelected(element, index, tabManager)
		{
			eval(script);	
		}
		
		//public - gets the script
		function getScript()
		{
			return script;	
		}
		
		//public - sets the script
		function setScript(script1)
		{
			script = script1;	
		}		
	}