// Dynamic menus, navigation bar, header, footer
// Copyright (c) 2007 Vilesse Ltd. All Rights Reserved.
// http://www.vilesse.com

function OutputContent (htmlContent, receiver, overwrite)
{
	if (receiver)
	{
		if (overwrite)
		{
			document.getElementById (receiver).innerHTML = htmlContent;
		}
		else
		{
			document.getElementById (receiver).innerHTML += htmlContent;
		}
	}
	else
	{
		document.write (htmlContent);
	}
}

function GenerateMainMenu (curPage)
{
	function GenerateMenuItem (item, rootMenu, currentNavString)
	{
		function ConcatenateNavString (oldString, newValue)
		{
			return (oldString == '') ? newValue : oldString + menuPrefix + newValue;
		}
		
		var prefix = '';
		var spacing = '';
		
		if (rootMenu)
		{
			prefix = '<span class="prefix">' + menuPrefix + '</span>';
			spacing = '&nbsp;&nbsp;&nbsp;';
		}

		for (var i = 0; i < item.order.length; ++i)
		{
			if (typeof item [item.order [i]] == "object")
			{
				// Pulldown menu item
				resHTML += '<li><a href="' + item [item.order [i]].mainURL + '" class="pulldown nofocus">' + prefix + item.order [i] + spacing + '</a><ul>';
				GenerateMenuItem (item [item.order [i]], false, ConcatenateNavString (currentNavString, item.order [i]));
				resHTML += '</ul></li>';
			}
			else
			{
				// Not a pulldown
				var linkClass = 'nofocus';
				var hrefLoc = item [item.order [i]];
				
				if (rootMenu)
				{
					linkClass += ' centered';
				}
				
				if (ConcatenateNavString (currentNavString, item.order [i]) == curPage)
				{
					// Shouldn't be a link
					linkClass += ' gag_link';
					hrefLoc = 'javascript:void (0);';
				}
				
				if (linkClass != '')
				{
					linkClass = ' class="' + linkClass + '"';
				}
				
				resHTML += '<li><a href="' + hrefLoc + '"' + linkClass + '>' + prefix + item.order [i] + spacing + '</a></li>';
			}
		}
	}

	var resHTML = '<div id="menu"><ul id="menu_inner">';
	GenerateMenuItem (mainMenu, true, '');
	resHTML += '</ul></div>';
	return resHTML;
}

function GenerateNavBar (curPage)
{
	var resHTML = '<div id="nav">';
	var navContents = curPage.split ('::');
	var currentMenuItem = mainMenu;

	for (var i = 0; i < navContents.length - 1; ++i)
	{
		resHTML += '<a href="' + currentMenuItem [navContents [i]].mainURL + '">' + navContents [i] + '</a>' + navPrefix;
		currentMenuItem = currentMenuItem [navContents [i]];
	}
	
	resHTML += '<a href="javascript:void (0);" class="gag_link nofocus">' + navContents [navContents.length - 1] + '</a></div>';
	return resHTML;
}

function GenerateLeftMenu (caption, menuObject, gagLinkTitle)
{
	function GetURLFromMenu (menuObj, orderNum)
	{
		if (typeof menuObj [menuObj.order [orderNum]] == "object")
		{
			return menuObj [menuObj.order [orderNum]].mainURL;
		}
		
		return menuObj [menuObj.order [orderNum]];
	}
	
	function IsLinkToCurrentPage (linkTitle)
	{
		return gagLinkTitle == linkTitle;
	}
	
	function GenerateLink (caption, link, shouldBeGag, additionalClass)
	{
		var finalClass = shouldBeGag ? "gag_link" : '';
				
		if (additionalClass != '')
		{
			if (finalClass != '')
			{
				finalClass += ' ';
			}
			
			finalClass += additionalClass;
		}
			
		if (finalClass != '')
		{
			finalClass = ' class="' + finalClass + '"';
		}

		var linkHTML = '<a href="';
		linkHTML += shouldBeGag ? 'javascript:void (0)' : link;
		linkHTML += '"' + finalClass + '>' + caption + '</a>';
		
		return linkHTML;
	}

	var resHTML = '<div class="left_menu_header">' + caption + '</div><div class="left_menu_header_corner"></div><div class="left_menu_content">';
	
	for (var i = 0; i < menuObject.order.length - 1; ++i)
	{
		resHTML += GenerateLink (menuObject.order [i], GetURLFromMenu (menuObject, i), IsLinkToCurrentPage (menuObject.order [i]), 'nofocus');
	}
	resHTML += GenerateLink (menuObject.order [menuObject.order.length - 1], GetURLFromMenu (menuObject, menuObject.order.length - 1),
							 IsLinkToCurrentPage (menuObject.order [i]), 'last nofocus');
	resHTML += '</div>';
	
	return resHTML;
}

function GenerateLeftMenuBlock (curPage)
{
	function AddArrayExtraToPrototype ()
	{
		// indexOf is a non-standard Array method added in Javascript 1.6 (Firefox - Gecko 1.8 and later)
		// The following code will add indexOf to Array's prototype if it's missing
		if (!Array.prototype.indexOf)
		{
			Array.prototype.indexOf = function (elt /*, from*/)
			{
				var len = this.length;
				var from = Number(arguments[1]) || 0;
				
				from = (from < 0) ? Math.ceil(from) : Math.floor(from);
				if (from < 0)
				{
					from += len;
				}

				for (; from < len; from++)
				{
					if (this [from] === elt)
					{
						return from;
					}
				}
				
				return -1;
			};
		}
	}

	var navPath = curPage.split ('::');
	var resHTML = '<div id="left_menu_block">';
	
	if (navPath.length > 1)
	{
		// Generating quick menu (one level up the hierarchy)
		var curMenu = mainMenu;
		for (var i = 0; i < navPath.length - 1; ++i)
		{
			curMenu = curMenu [navPath [i]];
		}

		resHTML += GenerateLeftMenu (navPath [navPath.length - 2], curMenu, navPath [navPath.length - 1]);
	}

	AddArrayExtraToPrototype ();
	
	for (var i = 0; i < leftMenus.order.length; ++i)
	{
		if (leftMenus [leftMenus.order [i]].showOnPages.indexOf (curPage) != -1)
		{
			// This menu should be displayed on the current page
			resHTML += GenerateLeftMenu (leftMenus.order [i], leftMenus [leftMenus.order [i]], '');
		}
	}
	
	resHTML += '</div>';
	
	return resHTML;
}

function GenerateHeader (curPage)
{
	var resHTML = '<div id="header_content">';
	resHTML += '</div>';
	
	return resHTML;
}

function GenerateFooterLinks ()
{
	var resHTML = '<div id="footer_links">';
	
	for (var i = 0; i < footerLinks.order.length; ++i)
	{
		resHTML += '<a href="' + footerLinks [footerLinks.order [i]] + '">' + footerLinks.order [i] + '</a>';
	}
	
	resHTML += '</div>';
	return resHTML;
}

function GenerateEmailList ()
{
	var resHTML = '<ul>';
	
	for (var i = 0; i < emailTitles.length; ++i)
	{
		resHTML +='<li><p>' + emailTitles [i] + ': ' + '<a href="javascript:decrypt_and_email(' + i + ')">';
		resHTML += decrypt (i) + '</a></p></li>';
	}
	
	resHTML += '</ul>';
	return resHTML;
}

