/* This code stems from the DTHML + CSS (Peachpit Press) book */
var isDHTML = 0;
var isID = 0;
var isAll = 0;
var isLayers = 0;

/* for setNavFoldOut */
var foldOutOpen = 1;
var iconfoldOutOpen = 1;
var slideSpeed = 0;
var object = null;

if (document.getElementById)
	{isID = 1; isDHTML = 1;}
else {
	if (document.all) 
		{isAll = 1; isDHTML = 1;}
	else {
		browserVersion = parseInt(navigator.appVersion);
		if ((navigator.appName.indexOf('Netscape') != -1) && (browserVersion == 4)) 
			{isLayers = 1; isDHTML = 1;}
	}
}

function findDOM(objectID,withStyle) {
	if (withStyle == 1) {
		if (isID) { return (document.getElementById(objectID).style) ; }
		else { 
			if (isAll) { return (document.all[objectID].style); }
		else {
			if (isLayers) { return (document.layers[objectID]); }
		};}
	}
	else {
		if (isID) { return (document.getElementById(objectID)) ; }
		else { 
			if (isAll) { return (document.all[objectID]); }
		else {
			if (isLayers) { return (document.layers[objectID]); }
		};}
	}
}

/* This code stems from the Java+CSS+DHTML Web Tricks book (oversize design book) */
/* this is the basic document object constructor introduced in Project 12.
Two functions are defined: getDocObj() and getStyleObj. The getDocObj() function creates the document object for the browser in use depending on whether it recognizes document.layers, document.all or document.getElementById(). The getStyleObj() function gets the style object of a document object. 

To invoke each, use like this:

variablename = eval(getDocObj(elementidvalue)); 

or 

variablename = eval(getStyleObj(elementidvalue)); 

Use this in conjunction with any cross-browser script where you must account for Netscape 4.x, IE 4.x and W3C DOM compliant browsers.

*/


function getDocObj(elem,parent) {
	if (document.layers) {
	    if (parent) {
	     return "document."+parent+".document."+elem;
	      }
	    else {
		return "document."+elem;
		     }
		
	  } 
	    else if (document.all) {
		return "document.all."+elem;
	} 
	    else if (document.getElementById) {
		return "document.getElementById('"+elem+"')";
	}
}


function getStyleObj(elem,parent) {
	if (document.layers) {
	    if (parent) {
	     return "document."+parent+".document."+elem;
	      }
	    else {
		return "document."+elem + ".style";
		     }
		
	  } 
	    else if (document.all) {
		return "document.all."+elem + ".style";
	  } 
	    else if (document.getElementById) {
		return "document.getElementById('"+elem+"').style";
		
	}
}


function navigationToggle(arrowtext,toggleblock)
{   
	arrowObject = findDOM(arrowtext,0);
	arrowObject.innerHTML = ("6" == arrowObject.innerHTML ? "4" : "6");
	
	navigationObject = findDOM(toggleblock,0);
	if (navigationObject.className == "clamMenuOpened") {
		navigationObject.className = "clamMenuClosed" }
	else {
		navigationObject.className = "clamMenuOpened"
	}
}

function setIconMenu (objectID, navImgObjectId, classObj, imgOpen, imgClosed) {
	object = document.getElementById(objectID);
	
	if (iconfoldOutOpen)
		{ fX = -198; cX = 0; iconfoldOutOpen= 0; }
	else
		{ fX = 0; cX = -198; iconfoldOutOpen= 1; }

	slideMenu(cX,fX);
	
	object = document.getElementById(navImgObjectId);
	object2 = document.getElementById(classObj);
	
	if (iconfoldOutOpen == 1)
		{ object.src = imgClosed;
		  object2.className = 'scClosedImage'; }
	else
		{ object.src = imgOpen;
		  object2.className = 'scOpenedImage'; }
}
			
function setMenu (objectID, navImgObjectId, classObj, imgOpen, imgClosed) {
	object = document.getElementById(objectID);
	
	if (foldOutOpen)
		{ fX = -178; cX = 0; foldOutOpen= 0; }
	else
		{ fX = 0; cX = -178; foldOutOpen= 1; }

	slideMenu(cX,fX);
	
	object = document.getElementById(navImgObjectId);
	object2 = document.getElementById(classObj);
	
	if (foldOutOpen == 1)
		{ object.src = imgClosed;
		  object2.className = 'scClosedImage'; }
	else
		{ object.src = imgOpen;
		  object2.className = 'scOpenedImage'; }
}

function slideMenu (cX,fX) {
	if (cX != fX) {
		if (cX > fX)
			{ cX -= slideSpeed; }
		else
			{ cX += slideSpeed; }
		object.style.left = cX + 'px';
		/* setTimeout('slideMenu(' + cX + ',' + fX + ')', 0);   */
	}
	return;
}

/*  Auto TOC Functions */

function H_getText(el) {
	var text = "";
	for (var i = el.firstChild; i != null; i = i.nextSibling) {
		if (i.nodeType == 3 )/* Node.TEXT_NODE, IE doesn't speak constants */
			text += i.data;
		else if (i.firstChild != null)
			text += H_getText(i);
	}
	return text;
}

function TOC_EL(el, text, level) {
	this.element = el;
	this.text = text;
	this.level = level;
}

function getHeadlines(el) {
	var l = new Array;
	var rx = /[hH]([1-6])/;
	// internal recursive function that scans the DOM tree
	var rec = function (el) {
		for (var i = el.firstChild; i != null; i = i.nextSibling) {
			if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
				if (rx.exec(i.tagName))
					l[l.length] = new TOC_EL(i, H_getText(i), parseInt(RegExp.$1));
				rec(i);
			}
		}
	}
	rec(el);
	return l;
}

function generate_TOC(parent_id) {
	var parent = document.getElementById(parent_id);
	var hs = getHeadlines(document.getElementsByTagName("body")[0]);
	for (var i = 0; i < hs.length; ++i) {
		var hi = hs[i];
		var d = document.createElement("div");
		if (hi.element.id == "")
			hi.element.id = "gen" + i;
		var a = document.createElement("a");
		a.href = "#" + hi.element.id;
		a.appendChild(document.createTextNode(hi.text));
		d.appendChild(a);
		d.className = "level" + hi.level;
		parent.appendChild(d);
	}
}


