//  =============================== Menu layer management ===============================

	var currentBookLayer = null;
	var currentChapterLayer = null;
	var menuChapterItemSender = null;
	var menuChapterItemClassName = null;
	var timeLayer = null;
	var delay = 500;
	var menuname = "book";
	var positionLeftmenuLeft = 175;
	var positionTopmenuTop = 20;
	var positionTopmenuLeft = 3;
	var timeCheckActiveStyles = null;
	var ChapterIsActive = false;
	var ParagraphState = false;
	var timeDelayBookActivation = null;
	var timeDelayChapterActivation = null;
	var previousLayer = null;
	

	function whatbrowser()
	{
		var intBrowser = 0; // IE and generic browsers.
	
	if (document.layers)
		intBrowser = 1; // Netscape Navigator 4.
		else
			if (!document.all && document.getElementById)
				intBrowser = 2; // Recent Netscape Navigators and FireFoxes.
		
		return intBrowser;
	}
	
	var callingMethod = whatbrowser();

	function findPosX(obj, x)
	{
		var curleft = 0;
		
		if (obj.offsetParent)
		{
			while (obj.offsetParent)
			{
				curleft += obj.offsetLeft;
				obj = obj.offsetParent;
			}
		}
		else if (obj.x)
			curleft += obj.x;
			
		var ret = (curleft == 0) ? x : curleft;
		return ret;
	}

	function findPosY(obj, y)
	{
		var curtop = 0;
		
		if (obj.offsetParent)
		{
			while (obj.offsetParent)
			{
				curtop += obj.offsetTop;
				obj = obj.offsetParent;
			}
		}
		else if (obj.y)
			curtop += obj.y;
			
		var ret = (curtop == 0) ? y : curtop;
		return ret;
	}
	
	function SetParagraphMenu(SetState)
	{

		ParagraphState = SetState;
		
		switch(SetState)
		{
			case true:
				if (timeLayer)
					window.clearTimeout(timeLayer);
					
				if (timeDelayChapterActivation)	
					window.clearTimeout(timeDelayChapterActivation);
					
				break;
				
			case false:
				if (currentBookLayer)
					setLayerTimeout(currentBookLayer);
					else setLayerTimeout(currentChapterLayer);

			break;
		}	
	}
	
	function removeLayersImmediatly()
	{
		if (currentBookLayer)
			hideLayer(currentBookLayer);
			

		window.clearTimeout(timeCheckActiveStyles);
			
		ChapterMenuitemIsActive = true;
	}
	
	function leftLeftMenu()
	{
		timeCheckActiveStyles = window.setInterval(CheckActiveStyles, delay);
		ChapterMenuitemIsActive = false;
	}
	
	function setClassName(sender, className)
	{
		if (sender == menuChapterItemSender)
			return;
			
		if (menuChapterItemSender != null)
		{
			switch (callingMethod)
			{
				case 0:
					ref = document.all[menuChapterItemSender];
					ref.className = menuChapterItemClassName;
				break;
				
				case 1:
					ref = document.all[menuChapterItemSender];
					ref.className = menuChapterItemClassName;
				break;
				
				case 2:
					ref = document.getElementById(menuChapterItemSender);
					ref.className = menuChapterItemClassName;
				break;
			}
		}

		var tmp = null;
		
		if (sender != null)
		{
			switch (callingMethod)
			{
				case 0:
					var ref = document.all[sender];
					tmp = ref.className;
					ref.className = className;
				break;
				
				case 1:
					var ref = document.all[sender];
					tmp = ref.className;
					ref.className = className;
				break;
				
				case 2:
					var ref = document.getElementById(sender);
					tmp = ref.className;
					ref.className = className;
				break;
			}
		}
		
		menuChapterItemSender = sender;
		menuChapterItemClassName = tmp;
	}
	
	function showChapterLayer(sender, layer, x, y)
	{
		if (sender == null)
		{
			if (currentChapterLayer)
				hideLayer(currentChapterLayer);
				
			return;
		}
		
		ChapterIsActive = true;
		
		var left = findPosX(sender, x);
		var top = findPosY(sender, y);
		
		if (currentChapterLayer)
			hideLayer(currentChapterLayer);
			
		currentChapterLayer = layer;
		left+= positionLeftmenuLeft;
		
		switch (callingMethod)
		{
			case 0:
				var ref = document.all[layer];
				ref.style.left = left + "px";
				ref.style.top = top + "px";
				ref.style.visibility = "visible";
			break;
			
			case 1:
				var ref = document.layers[layer];
				ref.left = left;
				ref.top = top;
				ref.visibility = "visible";
			break;
			
			case 2:
				var ref = document.getElementById(layer);
				ref.style.left = left + "px";
				ref.style.top = top + "px";
				ref.style.visibility = "visible";
			break;
		}
	}
	
	function showBookLayer(sender, layer, x, y)
	{
		if (currentBookLayer == layer || layer == null)
		{
			window.clearTimeout(timeDelayBookActivation);
			window.clearTimeout(timeLayer);
			return;
		}
		
		var left = findPosX(sender, x);
		var top = findPosY(sender, y);
		
		var parameter = "ActivateBooklayer('" + layer + "', " + left + ", " + top + ")";
		timeDelayBookActivation = window.setTimeout(parameter, delay);
	}

	function ActivateBooklayer(layer, x, y)
	{
		if (currentBookLayer == layer || layer == null)
		{
			window.clearTimeout(timeLayer);
			return;
		}
		
		if (previousLayer)
		{
			if (previousLayer != layer)
				hideLayer(previousLayer);
		}
				
		previousLayer = layer;
			
		var left = x;
		var top = y;
		
		if (currentBookLayer)
			hideLayer(currentBookLayer);

		if (currentChapterLayer)
			hideLayer(currentChapterLayer);

		currentBookLayer = layer;

		if (currentBookLayer.indexOf(menuname) == 0)
		{
			top+= positionTopmenuTop;
			left+= positionTopmenuLeft;
		}
		else
		{
			left+= positionLeftmenuLeft;
		}

		
		
		switch (callingMethod)
		{
			case 0:
				var ref = document.all[layer];
				ref.style.left = left + "px";
				ref.style.top = top + "px";
				ref.style.visibility = "visible";
			break;
			
			case 1:
				var ref = document.layers[layer];
				ref.left = left;
				ref.top = top;
				ref.visibility = "visible";
			break;
			
			case 2:
				var ref = document.getElementById(layer);
				ref.style.left = left + "px";
				ref.style.top = top + "px";
				ref.style.visibility = "visible";
			break;
		}
	}
	
	function setLayerTimeout(layer)
	{
		if (layer == null)
			return;
			window.clearTimeout(timeDelayBookActivation);
		if (timeLayer)
			window.clearTimeout(timeLayer);
			
		var layerToHide = "hideLayer('" + layer + "');"
		timeLayer = window.setTimeout(layerToHide, delay);
	}
	
	function hideLayer(layer)
	{
		if (timeLayer)
			window.clearTimeout(timeLayer);
			
			ChapterIsActive = false;

			
		if (layer)
		{
			switch (callingMethod)
			{
				case 0:
				document.all[layer].style.visibility = "hidden";
				break;
			
			case 1:
				document.layers[layer].visibility = "hidden";
				break;
			
			case 2:
				document.getElementById(layer).style.visibility = "hidden";
				break;
			}
			
			ParagraphState = false;
			if (layer.indexOf(menuname) == 0)
			{
				setClassName(null, null);
				
				if (currentChapterLayer)
				{
					hideLayer(currentChapterLayer);
					currentChapterLayer = null;
				}
				currentBookLayer = null;
			}
		}
	}
	
	function CheckActiveStyles()
	{
		if (ChapterMenuitemIsActive)
		{
			window.clearTimeout(timeCheckActiveStyles);
			return;
		}

		if (ChapterIsActive || ParagraphState)
			return;
			
		setClassName(null, null);
		window.clearTimeout(timeCheckActiveStyles);
	}


//  =============================== Layout considerations ===============================

	var ScreenResolution = 1000;
	GetScreenResolution();
	
	function estimateWindowheight(estimation)
	{
    	var height = estimation; // Default.
    	
    	if (self.innerHeight) // all except Explorer
    		height = self.innerHeight;
    		else if (document.documentElement && document.documentElement.clientHeight) // Explorer 6 Strict Mode
      			height = document.documentElement.clientHeight;
      			else if (document.body) // other Explorers
    				height = document.body.clientHeight;
      
    	return height;
	}
	
	function insertLayoutImage(estimation)
	{
		if (ScreenResolution != 1000)
			return;
			
		var x, y;
		var test1 = document.body.scrollHeight;
		var test2 = document.body.offsetHeight

		if (test1 > test2) // all but Explorer Mac
		{
			x = document.body.scrollWidth;
			y = document.body.scrollHeight;
		}
		else // Explorer Mac;
		     //would also work in Explorer 6 Strict, Mozilla and Safari
		{
			x = document.body.offsetWidth;
			y = document.body.offsetHeight;
		}

		var Height = estimateWindowheight(0) - y - 27;
		Height = (Height > 25) ? Height : 25;

		document.write('<img alt="" src="/_styles/dot.gif" width="' + ScreenResolution + '" height="' + Height + '">');
	}
	
	function GetScreenResolution()
	{
		if (self.screen.width)
		{
			if (screen.width < 1024)
			{
				ScreenResolution = 776;
			}
		}
		
		switch (ScreenResolution == 1000)
		{
			case true:
				document.write('<link rel="stylesheet" type="text/css" href="/asc.css">');
				break;
				
			case false:
				document.write('<link rel="stylesheet" type="text/css" href="/asc800.css">');
				break;
		}
	}
	
//  =============================== Show and hide for FAQ and similar issues ===============================

function ShowHide(obj, divId)
{
	var id = document.getElementById(divId);

	if (id.style.display == "none")
	{
		id.style.display = 'block';
		obj.className = "MinusClose";
	}
	else
	{
		id.style.display = 'none';
		obj.className = "PlusOpen";
	}
}


//  =============================== Email obfuscator ===============================
	// Email obfuscator script 2.1 by Tim Williams, University of Arizona
	// Random encryption key feature by Andrew Moulden, Site Engineering Ltd
	// This code is freeware provided these four comment lines remain intact
	// A wizard to generate this code is at http://www.jottings.com/obfuscator/
	
	
function EmailObfuscator(coded, key)
{
	var shift = coded.length ;
	var link = "" ;

	for ( i = 0 ; i < coded.length ; i++ )
	{
		var c = coded.charAt(i) ;
		
    	if ( key.indexOf( c ) ==-1 )
			link += c ;
		else
		{     
			var ltr = ( key.indexOf( c ) - shift + key.length ) % key.length ;
			link += key.charAt(ltr) ;
		}
	}
	
	document.write( "<a href='mailto:" + link + "'>" + link + "</a>" );
}


//  =============================== New captcha image ===============================
var page = 0 ;
function SetCaptcha( id )
{
	var pagename = "/_ASCWebsite/Image.aspx?captcha=" + page++;
	
	var captcha_container = document.getElementById(id);
	var captcha_image = document.getElementById('captchaimage');

	if ( captcha_image != null )
		captcha_container.removeChild(captcha_image);

	var captcha = document.createElement("img");
	captcha.setAttribute("id", "captchaimage");
	captcha.setAttribute("src", pagename );
	captcha.setAttribute("alt", "Captcha");
	captcha.setAttribute("title", "Verification code");
	
	captcha_container.appendChild( captcha ) ;
}