/* CONFIGURATION AREA */
/*
	browsers:
		IE - Microsoft Internet Explorer
		FF - FireFox
		Safari - Safari browser
		Opera - Opera browser
		all - includes IE, FF, Opera and Safari
		
	parentId:
		any existing Id attribute 
	tagName:
		any valid tag name
	tagPosition:
		all - all inner elements 
		children - first level children only
	className:
		any valid class name
*/

var browsers = 'all';
var config = {
	hovers: new Array(
		{
			parentId:'left_nav',
			tagName:'li',
			tagPosition:'children',
			className:'hover'
		}
	),
	tabs: new Array(
		{
			prefix:'tabtoggler1',
			activeTag: 'li',
			activeClass: 'active', 
			contentTag: 'div'
		}
	)
};

/* CODE AREA */

/* hovers */

var initHovers = function()
{
	for (var index in config.hovers){
		var conf = config.hovers[index];
		var topLevelElement = document.getElementById(conf.parentId);
		if (topLevelElement){
			var subElements = topLevelElement.getElementsByTagName(conf.tagName);
			for (var i = 0; i < subElements.length; i++){
				if (conf.tagPosition == 'all' || (conf.tagPosition == 'children' && subElements[i].parentNode.id == conf.parentId))
				{
					subElements[i].configIndex = index;
					subElements[i].onmouseover = function(){
						this.className += ' ' + config.hovers[this.configIndex].className;
					};
					subElements[i].onmouseout = function(){
						this.className = this.className.replace(config.hovers[this.configIndex].className,'');
					};
				}
			}
		}
	}
}

var TabsToggler = {};
function initTabs(){
	if(!config.tabs) return;
	for(var i=0; i < config.tabs.length; i++){
		var tab = config.tabs[i];
		var menu = document.getElementById( tab.prefix + '_menu' );
		var content = document.getElementById( tab.prefix + '_content' );
		if( !menu || !content ) continue;
		
		var oTab = tab;
		oTab.active = null;
		oTab.elements = {};
		
		var links = menu.getElementsByTagName("A");
		for(var j=0; j<links.length; j++){
			var linkEl = links[j];
			var activeEl = (tab.activeTag == 'this')? linkEl : getParentByTag(linkEl, tab.activeTag);
			var tabID = linkEl.getAttribute('rel');
			if( activeEl.className.lastIndexOf(tab.activeClass) > -1 ){
				oTab.active = tabID;
			}
			var tabContent = document.getElementById( tab.prefix + '_' + tabID );
			if( tabContent ){
				tabContent.style.display = (oTab.active && oTab.active == tabID)? 'block' : 'none';
			}
			
			linkEl.setAttribute('prefix', tab.prefix);
			oTab.elements[tabID] = {
				tabID: tabID,
				linkEl: linkEl,
				activeEl: activeEl,
				content: tabContent
			};
			
			linkEl.onclick = function(){
				var prefix = this.getAttribute('prefix');
				var tabID = this.getAttribute('rel');
				var oTab = TabsToggler[prefix];
				
				var activeTab = oTab.elements[ oTab.active ];
				activeTab.activeEl.className = activeTab.activeEl.className.replace(' '+oTab.activeClass, '').replace(oTab.activeClass, '');
				activeTab.content.style.display = 'none';
				
				oTab.active = tabID;
				var activeTab = oTab.elements[ oTab.active ];
				if( activeTab.activeEl.className.lastIndexOf(oTab.activeClass) == -1  )
					activeTab.activeEl.className += ' ' + oTab.activeClass;
				activeTab.content.style.display = 'block';
				
				return false;
			}
		} // end for( links )

		TabsToggler[ tab.prefix ] = oTab;
		
	} // end for( config.tabs )
}

function getParentByTag( node, tag ){
	if(typeof(node.tagName) != 'undefined'){
		if(node.tagName.toUpperCase() == tag.toUpperCase()){
			return node;
		}
		else if(typeof(node.parentNode) != 'undefined'){
			return getParentByTag(node.parentNode, tag);
		}
	}
	return null;
}

/* common */

var currentState = {};

var opera = window.opera;
var safari = navigator.appVersion.indexOf("Safari") != -1;
var ie = document.all && !window.opera;
var ff = navigator.userAgent.indexOf("Firefox") != -1;

var addEvent = function(browsers,event,initMethod)
{
	if (opera && (browsers.match(/Opera/) || browsers.match(/all/))) {
		window.addEventListener(event, initMethod, false);
	} else if (safari && (browsers.match(/Safari/) || browsers.match(/all/))) {
		window.addEventListener(event, initMethod, false);
	} else if (ie && (browsers.match(/IE/) || browsers.match(/all/))) {
		window.attachEvent("on" + event, initMethod);
	} else if (ff && (browsers.match(/FF/) || browsers.match(/all/))) {
		window.addEventListener(event, initMethod, false);
	} else if (!ie && !ff && !safari && !opera) {
		if (window.addEventListener){
			window.addEventListener(event, initMethod, false);
		}
		else if (window.attachEvent){
			window.attachEvent("on" + event, initMethod);
		}
	} 
}

addEvent(browsers,'load',initHovers);
addEvent(browsers,'load',initTabs);