//
// ChristianityToday.com JavaScript
// Version 1.1
// Copyright Â© 2006 Christianity Today International
// Modified for CLA (removed extraneous code)

// variables
	// user-agent identity
	var version = parseInt(navigator.appVersion);
	var isNS  = (navigator.appName.indexOf('Netscape') >= 0);
	var isNS4 = (isNS && version == 4);
	var isNS5 = (isNS && version > 4);
	var isFF  = (navigator.userAgent.indexOf('Firefox') >= 0);
	var isIE  = !isNS;
	var isIE4 = (isIE && version == 4);
	var isIE5 = (isIE && version > 4);
	var isMac = (navigator.appVersion.indexOf('Macintosh') >= 0);
	var isWin = !isMac;
	var isAOL = (navigator.userAgent.indexOf('AOL') >= 0);

	// Flash detection; minimum: version 4.0
	var flashVersion = 0;
	for (var i = 4; i <= 10; i++)
	{
		if (isIE)
		{
			document.write('<script language="VBScript" type="text/vbscript">\n');
			document.write('On Error Resume Next\n');
			document.write('CreateObject("ShockwaveFlash.ShockwaveFlash." & i)\n');
			document.write('If Err = 0 Then\n');
			document.write('flashVersion = i\n');
			document.write('End If\n');
			document.write('</script>\n');
		}
		else
		{
			var plugin = navigator.mimeTypes['application/x-shockwave-flash'].enabledPlugin;
			if (plugin && parseInt(plugin.description.substring(plugin.description.indexOf('.') - 1)) >= i)
			{
				flashVersion = i;
			}
		}
	}

	// events
	var clickURL;
	var mouseX = 0;
	var mouseY = 0;
	var pageWidth = 0;
	var pageHeight = 0;
	
	// settings
	var menuDelay = 100;
	var allowFrame = true;
	var menuDivArray = new Array('globalMenu', 'channelMenu');

	// page tools
	var windowArray = new Array();
	var pageURL = (window != top) ? document.referrer : location.href;
	var emailURL = 'email.html?title=%%title%%&url=%%url%%';
	var printURL = '/print.html?id=%%id%%';
	var similarURL = '/search.html?similar=%%url%%';
	var contextStyles =
	[
		['intro', 'cite', 'ital-off'],
		['bio', 'cite', 'ital-off']
	];
	
// CSS class functions
  	function hasClass(target, theClass)
  	{
  		var pattern = new RegExp('(^| )' + theClass + '( |$)');
  		if (pattern.test(target.className)) return true;
  		return false;
  	}
  	
  	function addClass(target, theClass)
  	{
  		if (!hasClass(target, theClass))
  		{
  			if (target.className === '')
  			{
  				target.className = theClass;
  			}
  			else
  			{
  				target.className = target.className + ' ' + theClass;
  			}
  		}
  	}
  	
  	function removeClass(target, theClass)
  	{
  		var pattern = new RegExp('(^| )' + theClass + '( |$)');
  		target.className = target.className.replace(pattern, '$1');
  		target.className = target.className.replace(/ $/, '');
  	}


// event capturing
	if (isNS4)
	{
		window.captureEvents(Event.ONLOAD);
		window.onLoad = pageLoad;
		window.captureEvents(Event.ONUNLOAD);
		window.onUnload = pageUnload;
		document.captureEvents(Event.CLICK);
		document.onClick = mouseClick;
		document.captureEvents(Event.MOUSEMOVE);
		document.onMouseMove = mouseMove;
	}

	if (isNS5)
	{
		window.addEventListener('load', pageLoad, false);
		window.addEventListener('unload', pageUnload, false);
		document.addEventListener('click', mouseClick, false);
		document.addEventListener('mousemove', mouseMove, false);
	}

	if (isIE)
	{
		window.attachEvent('onload', pageLoad);
		window.attachEvent('onunload', pageUnload);
		document.attachEvent('onclick', mouseClick);
		document.attachEvent('onmousemove', mouseMove);
	}

// event handlers
	function pageLoad(evt)
	{
		// frame break
		if (window != top && allowFrame != true) top.location.replace(location.href);

		// create menu divs
		createMenuDivs();

		// display hover
		if (window.showPromo) showPromo();

		// set contextual styles
		setContextStyles();

		if (window.channelLoad) channelLoad();
	}

	function pageUnload(evt)
	{
		// close child windows
		for (var i = 0; i < windowArray.length; i++)
		{
			if (typeof windowArray[i] == 'object' && !windowArray[i].closed) windowArray[i].close();
		}

		if (window.channelUnload) channelUnload();
	}

	function mouseOver(evt)
	{
		obj = (evt.target) ? evt.target : evt.srcElement;
		if (!hasClass(obj, 'currentPanel')) {
			if (obj.over) obj.src = obj.over.src;
		}
		if (obj.tip) showTip(obj);
		if (obj.menu) showMenu(obj, evt);
	}

	function mouseOut(evt)
	{
		obj = (evt.target) ? evt.target : evt.srcElement;
		if (!hasClass(obj, 'currentPanel')) {
			if (obj.out) obj.src = obj.out.src;
		}
		if (obj.tip) hideTip(obj);
		if (obj.menu) delayHideMenu();
	}

	function mouseClick(evt)
	{
		if (isNS4)
		{
			clickURL = evt.target.href;
		}
		else if (isNS5)
		{
			node = evt.target;
			while (node.tagName != 'A' && node.tagName != 'HTML')
			{
				node = node.parentNode;
			}
			clickURL = node.href;
		}
		else if (isIE)
		{
			element = evt.srcElement;
			while (element.tagName != 'A' && element.tagName != 'HTML')
			{
				element = element.parentElement;
			}
			clickURL = element.href;
		}

		if (clickURL == null) clickURL = '';
	}

	function mouseMove(evt)
	{
		if (isNS)
		{
			mouseX = evt.pageX;
			mouseY = evt.pageY;
			pageWidth = window.innerWidth;
			pageHeight = window.innerHeight;
		}
		else
		{
			mouseX = evt.clientX;
			mouseY = evt.clientY + document.body.scrollTop;
			
			if (document.compatMode && document.compatMode == 'CSS1Compat')
			{
				pageWidth = document.body.parentNode.clientWidth;
				pageHeight = document.body.parentNode.clientHeight;
			}
			else
			{
				pageWidth = document.body.clientWidth;
				pageHeight = document.body.clientHeight;
			}
		}
		
		//if (tipVisible)
		//{
			//moveTip();
		//}
	}

	function addMouseEvents(obj)
	{
		if (isNS5)
		{
			obj.addEventListener('mouseover', mouseOver, false);
			obj.addEventListener('mouseout', mouseOut, false);
		}
		if (isIE)
		{
			obj.detachEvent('onmouseover', mouseOver);
			obj.attachEvent('onmouseover', mouseOver);
			obj.detachEvent('onmouseout', mouseOut);
			obj.attachEvent('onmouseout', mouseOut);
		}
	}

// mouseovers; incompatible with NS4
	//
	// Usage:
	// <a href="LINK"><img src="IMAGE.EXT" onload="mouseLoad(this);" width="WIDTH" height="HEIGHT" title="ALT" /></a>
	// 
	// Note: mouseover image must be named IMAGE_over.EXT
	//
	function mouseLoad(obj)
	{
		if (isNS4 || obj.out) return;
		
		obj.out = new Image();
		obj.out.src = obj.src;
		obj.over = new Image();
		obj.over.src = obj.src.replace(/.gif$/, '_over.gif').replace(/.jpg$/, '_over.jpg');
		
		addMouseEvents(obj);
	}

// dropdown menu
	//
	// Usage:
	// <img src="IMAGE.EXT" onload="menuLoad(this, 'MENU_NAME', 'WIDTH', 'LEFT|RIGHT');" width="WIDTH" height="HEIGHT" title="ALT" />
	//
	// Note: create menu items in a separate JavaScript file
	//
	
	var menu = new Array();
	var menuTimeout;

	function createMenuDivs()
	{
		if (!isNS4)
		{
			for (var i = 0; i < menuDivArray.length; i++)
			{
				var newDiv = document.createElement('div');
				newDiv.setAttribute('id', menuDivArray[i]);
				newDiv.setAttribute('style', 'display: none; width: 0px;');
				if (isNS5)
				{
					newDiv.addEventListener('mouseover', clearHideMenu, false);
					newDiv.addEventListener('mouseout', delayHideMenu, false);
				}
				if (isIE)
				{
					newDiv.attachEvent('onmouseover', clearHideMenu);
					newDiv.attachEvent('onmouseout', delayHideMenu);
				}
				document.body.appendChild(newDiv);
			}
		}
	}

	function menuLoad(obj, name, width, align)
	{
		if (isNS4 || obj.menu) return;

		obj.menu = menu[name];
		obj.menuName = name;
		obj.menuWidth = width;
		obj.menuAlign = align;
		
		addMouseEvents(obj);
	}
	
	function showMenu(obj, evt)
	{
		var menuObject;
		if (isNS4 || ! obj.menu) return;

		if (window.event)
		{
			event.cancelBubble = true;
		}
		else if (evt.stopPropagation)
		{
			evt.stopPropagation();
		}
		clearHideMenu();

		var menuDiv = 'channelMenu';
		if (obj.menuName.indexOf('global_') == 0)
		{
			menuDiv = 'globalMenu';
		}
	  
		menuObject = document.getElementById ? document.getElementById(menuDiv) : document.all[menuDiv];
		
		if (menuObject)
		{
			menuObject.innerHTML = obj.menu.join('');

			menuObject.style.width = obj.menuWidth + 'px';
			if (evt.type == 'click' && obj.visibility == hidden || evt.type == 'mouseover')
			{
				menuObject.style.display = 'block';
			}
			else if (evt.type == 'click')
			{
				menuObject.style.display = 'none';
			}
	
			var horizontalOffset;
			var verticalOffset;
			if (obj.menuAlign == 'right')
			{
				horizontalOffset = obj.offsetLeft + obj.offsetWidth;
			}
			else
			{
				horizontalOffset = obj.offsetLeft;
			}
			verticalOffset = obj.offsetTop + obj.offsetHeight;
			
			var parentElement = obj.offsetParent;
			while (parentElement != null)
			{
				horizontalOffset = horizontalOffset + parentElement.offsetLeft;
				verticalOffset = verticalOffset + parentElement.offsetTop;
				parentElement = parentElement.offsetParent;
			}
			if (obj.menuAlign == 'right')
			{
				menuObject.x = horizontalOffset - obj.menuWidth;
			}
			else
			{
				menuObject.x = horizontalOffset;
			}
			menuObject.y = verticalOffset;
			menuObject.style.left = menuObject.x;
			menuObject.style.top = menuObject.y;
		}
	}

	function delayHideMenu()
	{
		if (isNS4) return;

		menuTimeout = setTimeout('hideMenu()', menuDelay);
	}

	function hideMenu()
	{
		if (isNS4) return;

		var menuObject;

		for (var i = 0; i < menuDivArray.length; i++)
		{
			menuObject = document.getElementById ? document.getElementById(menuDivArray[i]) : document.all[menuDivArray[i]];
			if (typeof menuObject != 'undefined')
			{
				menuObject.style.display = 'none';
			}
		}
	}

	function clearHideMenu()
	{
		if (typeof menuTimeout != 'undefined') clearTimeout(menuTimeout);
	}

	document.onclick = hideMenu;




// page load routines
	// set contextual styles (incompatible with NS4)
	function setContextStyles()
	{
		if (isNS4) return;

		var elementList = document.getElementsByTagName('*');
		for (i = 0; i < elementList.length; i++)
		{
			for (j = 0; j < contextStyles.length; j++)
			{
				if (elementList[i].className == contextStyles[j][0])
				{
					currentNode = elementList[i].firstChild;
					while (currentNode)
					{
						if (currentNode.className == contextStyles[j][1])
						{
							switch (contextStyles[j][2])
							{
								case 'ital-off':
									currentNode.style.fontStyle = 'normal';
									break;
								case 'ital-on':
									currentNode.style.fontStyle = 'italic';
									break;
								case 'bold-off':
									currentNode.style.fontWeight = 'normal';
									break;
								case 'bold-on':
									currentNode.style.fontWeight = 'bold';
									break;
								default:
									break;
							}
						}
						currentNode = currentNode.nextSibling;
					}
				}
			}
		}
	}



