/**
 * Author: Istvan Pusztai / inZEN Design
 * Date: 2007-01-11
 * Last Modified: 2007-01-11
 * This javascript uses the prototype framework.
 */

function init()
{
    // quit if this function has already been called
    if(arguments.callee.done) return;
    // flag this function so we don't do the same thing twice
    arguments.callee.done = true;
	
	$('tab_' + section).className = "tab_selected";
	$('menu_' + section).className = "show";
	
	tabsParentNode = $('tabs');
	menusParentNode = $('nav');

	// Traverse DOM to attach events to tabs
	for(var i = 0; i < tabsParentNode.childNodes.length; i++)
		if(tabsParentNode.childNodes[i].nodeName == "DIV")
		{
			var child = tabsParentNode.childNodes[i];
			
			Event.observe(child.id, 'mouseover', tabMouseOver, false);
			Event.observe(child.id, 'mouseout', tabMouseOut, false);
			if(child.className == "tab_selected")
			{
				defaultTab = child;
				previousTab = defaultTab;
			}
		}
	// Attach events to menus
	for(var i = 0; i < menusParentNode.childNodes.length; i++)
		if(menusParentNode.childNodes[i].nodeName == "DIV")
		{
			var child = menusParentNode.childNodes[i];
			Event.observe(child.id, 'mouseover', menuMouseOver, false);
			Event.observe(child.id, 'mouseout', menuMouseOut, false);
			if(child.className == "show")
			{
				defaultMenu = child;
				previousMenu = defaultMenu;
			}
		}
		noSection = (defaultMenu == null) ? true : false;

} // END onLoadEvent()

// Constants
var DELAY_TABSELECT = 100;
var DELAY_REVERT = 500; 

// Variables to be initialized during the DOM traversal for event attachement
var defaultTab = null;
var defaultMenu = null;
var previousTab = null;
var previousMenu  = null;
var currentTab = null;
var currentMenu = null;
var noSection;

// Variables to be initialized during events
var keyPressTimer = null;
var tabMouseOverTimer = null;
var tabMouseOutTimer = null;
var menuMouseOutTimer = null;
var autoRevertTimer = null;

// Hover states
var tabHovered = false;
var menuHovered = false;

// Parent nodes (container divs) of tabs and menus
var tabsParentNode = null;
var menusParentNode = null;

if(document.addEventListener) { // Mozilla init()
	document.addEventListener("DOMContentLoaded", init, false);
}
// Internet Explorer init()
/*@cc_on @*/
/*@if (@_win32)
   document.write("<script defer src='includes/ie_onload.js'><"+"/script>");
/*@end @*/
// Other browsers init()
window.onload = init;

///////////////////////////////////////////////////////////////////////////////////////////
// + TABBED MENU
///////////////////////////////////////////////////////////////////////////////////////////
function switchTab(revert)
{
	clearTimeout(autoRevertTimer);
	
	if(previousMenu != null)
		previousMenu.className = "hide"; // set previous submenu to hidden
		
	currentMenu.className = ""; // set the target submenu visible
	
	if(previousTab != null)
	{
		if(noSection)
			previousTab.className = ""; // set previous tab to unselected
		else
		{
			if(previousTab.id == defaultTab.id)
				previousTab.className = "on";
			else
				previousTab.className = ""; // set previous tab to unselected
		}
	}
	currentTab.className = "tab_selected"; // set current tab to selected
	
	previousMenu = currentMenu;
	previousTab = currentTab;

	if(revert == true)
		autoRevertTimer = setTimeout(revert, DELAY_REVERT);
}
function revert()
{
	if(!tabHovered && !menuHovered)
	{
		if(!noSection)
		{
			currentTab = defaultTab;
			currentMenu = defaultMenu;
			switchTab(false);
		}
		else if(previousMenu != null)
		{
			previousMenu.className = "hide"; // set previous submenu to hidden
			previousTab.className = ""; // set previous tab to unselected
		}
	}
}
function tabMouseOver(e)
{
	tabHovered = true;
	if(tabMouseOutTimer != null) clearTimeout(tabMouseOutTimer);
	if(tabMouseOverTimer != null) clearTimeout(tabMouseOverTimer);
	
	var targ = Event.element(e); // find the target from Event e	
	var targetMenu = $("menu" + targ.id.substr(targ.id.indexOf("_")));
	
	if(targetMenu == null)
		return;
	
	currentTab = targ;
	currentMenu = targetMenu;
	
	tabMouseOverTimer = setTimeout(switchTab, DELAY_TABSELECT); // menu id is located in the image tag's alt property
}
function tabMouseOut(e)
{
	tabHovered = false;
	if(tabMouseOverTimer != null) clearTimeout(tabMouseOverTimer);
	if(tabMouseOutTimer != null) clearTimeout(tabMouseOutTimer);
	tabMouseOutTimer = setTimeout(revert, DELAY_REVERT);
}
function menuMouseOut(e)
{
	menuHovered = false;
}
function menuMouseOver(e)
{
	menuHovered = true;
}
