
//	Copyright © 1999 by Samuel Reynolds. All rights reserved.
//	Copyright © 1999 by Samuel Reynolds. All rights reserved.

function RelativeURL( toPath, fromPath, pathSep ) {
	if ( pathSep == null ) {
		pathSep = '/';
	}
	var fromBits = fromPath.split( pathSep );
	var numFromBits = fromBits.length;
	var toBits = toPath.split( pathSep );
	var numToBits = toBits.length;
	var minBits = numToBits;
	if ( minBits > numFromBits ) {
		minBits = numFromBits;
	}
	
	//	Skip common path prefix
	var startIdx = 0;
	while ( ( startIdx < minBits ) && ( fromBits[startIdx] == toBits[startIdx] ) ) {
		startIdx ++;
	}
	if ( startIdx == numFromBits ) {
		//	Same page
		return ( "#" );
	}
	
	//	Replace path folders in fromPath with go-up-one
	var newPrefix = "";
	var idx;
	if ( ( numFromBits - startIdx - 1 ) > 0 ) {
		for ( idx=0; idx<( numFromBits - startIdx - 1 ); idx++ ) {
			newPrefix += ".." + pathSep;
		}
	}
	
	//	Destination path is now prefix (go-up-n) + remainder of toPath
	var relPath = newPrefix;
	for ( idx=startIdx; idx<numToBits-1; idx++ ) {
		relPath += toBits[idx] + pathSep;
	}
	relPath += toBits[numToBits-1];
	
	return( relPath );
}
//	Find and replace a single instance of inFindStr in inText with inReplStr
function Replace( inText, inFindStr, inReplStr, inCaseSensitive ) {
	//	inText is the text in which to do the search;
	//	inFindStr is the string to find;
	//	inReplStr is the string to substitute into inText in place of inFindStr; and
	//	inCaseSensitive is a boolean value (defaults to false).
	var offset = 0;
	if ( inCaseSensitive ) {
		var testText = inText.toLowerCase();
		inFindStr = inFindStr.toLowerCase();
		offset = testText.indexOf( inFindStr );
	} else {
		offset = inText.indexOf( inFindStr );
	}
	if ( offset == -1 ) {
		//	No match
		return ( inText );
	}
	var outText = inText.substring( 0, offset );
	outText += inReplStr;
	outText += inText.substr( offset + inFindStr.length, inText.length );
	return ( outText );
}
//	Copyright © 1999 by Samuel Reynolds. All rights reserved.

function URLFromImgTag( inTag ) {
	var startOffset = inTag.indexOf( 'src="' );
	if ( startOffset == -1 ) {
		return ( "" );
	}
	startOffset += 5;
	var endOffset = inTag.indexOf( '"', startOffset );
	if ( endOffset == -1 ) {
		return ( "" );
	}
	return ( inTag.substring( startOffset, endOffset ) );
}
//	=======	MODULE:	NavBar	========




//	NavItem Copyright © 1999 by Samuel Reynolds. All rights reserved.

function NavItem( label, url, yLevel ) {
	if ( this.prototype == null ) {
		//	Attributes
		this.label = "Undefined";
		this.url = "Undefined";
		this.yLevel = 1;
		this.hasSubs = false;
		//	Methods
		this.IsCurrentPage = NAVI_IsCurrentPage;
		this.Render = NAVI_Render;
	}
	if ( label != null ) this.label = label;
	if ( url != null ) this.url = url;
	if ( yLevel != null ) this.yLevel = yLevel;
}

function NAVI_IsCurrentPage() {
	return ( this.url == siteRelativePageUrl );
}
function NAVI_Render( inNavbar ) {
	var outStr = "";
	var currentPage = this.IsCurrentPage();
	if ( currentPage ) {
		outStr += inNavbar.currentFontTag;
		if ( inNavbar.currentFontBold ) {
			outStr += "<b>";
		}
		outStr += this.label;
		if ( inNavbar.currentFontBold ) {
			outStr += "</b>";
		}
		if ( inNavbar.currentFontTag != "" ) {
			outStr += "</font>";
		}

	} else {
		var maxShowLevel = 1;
		if ( inNavbar.maxShowLevel != null ) {
			maxShowLevel = inNavbar.maxShowLevel;
		}
		var doShowMe = ( this.yLevel <= maxShowLevel );
		var relUrl = RelativeURL( this.url, siteRelativePageUrl );
		if ( ! doShowMe ) {
			var upCount = 0;
			var downCount = 0;
			var offset = 0;
			while ( true ) {
				offset = relUrl.indexOf( "../", offset );
				if ( offset == -1 ) {
					break;
				} else {
					upCount ++;
				}
				offset = offset + 3;
			}
			while ( true ) {
				offset = relUrl.indexOf( "/", offset );
				if ( offset == -1 ) {
					break;
				} else {
					downCount ++;
				}
				offset = offset + 1;
			}
			if ( upCount == 0 ) {
				if ( downCount == 0 ) {
					doShowMe = true;
				} else if ( downCount == 1 ) {
					 if ( ( relUrl.indexOf( "index." ) != -1 ) || ( relUrl.indexOf( "default." ) != -1 ) ) {
						  doShowMe = true;
					}
				}
			} else {
				if ( downCount < 2 ) {
					doShowMe = true;
				} else if ( downCount == 2 ) {
					 if ( ( relUrl.indexOf( "index." ) != -1 ) || ( relUrl.indexOf( "default." ) != -1 ) ) {
						  doShowMe = true;
					}
				}
			}
		}
		
		if ( doShowMe ) {
			outStr = "<a href='" + relUrl + "'>";
			outStr += inNavbar.fontTag;
			if ( inNavbar.fontBold ) {
				outStr += "<b>";
			}
			outStr += this.label;
			if ( inNavbar.fontBold ) {
				outStr += "</b>";
			}
			if ( inNavbar.fontTag != "" ) {
				outStr += "</font>";
			}
			outStr += "</a>";
		}
	}
	return ( outStr );
}

//	Image URLs and tags required for rendering

//	Render here to force images to be rendered out
var siteRelSpacerImage = '<img src="../../images/space.gif" height=1 width=1 border=0>';
var siteRelOpArrowNoSubsImage = '<img src="../../images/oparrownosubs.gif" height=11 width=7 border=0>';
var siteRelOpArrowWithSubsImage = '<img src="../../images/oparrowwithsubs.gif" height=11 width=7 border=0>';

//	Now ignore rendered tags; hard-code tags to be site-relative
siteRelSpacerImage = '<img src="images/space.gif" height=1 width=1 border=0>';
siteRelOpArrowNoSubsImage = '<img src="images/oparrownosubs.gif" height=11 width=7 border=0>';
siteRelOpArrowWithSubsImage = '<img src="images/oparrowwithsubs.gif" height=11 width=7 border=0>';

var siteRelSpacerImageURL = URLFromImgTag( siteRelSpacerImage );
var siteRelOpArrowNoSubsImageURL = URLFromImgTag( siteRelOpArrowNoSubsImage );
var siteRelOpArrowWithSubsImageURL = URLFromImgTag( siteRelOpArrowWithSubsImage )
function NavBar() {
	if ( this.prototype == null ) {
		//	Attributes
		this.currentBgColor = "";
		this.currentFontBold = false;
		this.currentFontTag = "";
		this.fontBold = false;
		this.fontTag = "";
		this.indentPixels = 8;
		this.items = new Array();
		this.vspacePixels = 4;
		this.width = 0;
		//	Methods
		this.AddItem = NAVB_AddItem;
		this.Render = NAVB_Render;
	}
}

function NAVB_AddItem( inItem ) {
	//	if ( ( this.fontTag != null ) && ( this.fontTag != "" ) )
	//		if ( ( inItem.fontTag == null ) || ( inItem.fontTag == "" ) )
	//			inItem.fontTag = this.fontTag
	//			inItem.fontBold = this.fontBold
	var numItems = this.items.length;
	if ( numItems > 0 ) {
		if ( inItem.yLevel > this.items[numItems-1].yLevel ) {
			this.items[numItems-1].hasSubs = true;
		}
	}
	this.items[numItems] = inItem;
}
function NAVB_Render( inRenderAs, inNavBar ) {
	var outStr = "";
	var numItems = this.items.length;
	
	//	Start table
	outStr += "<table border=0 cellspacing=0 cellpadding=0";
	if ( ( this.width != null ) && ( this.width != 0 ) ) {
		outStr += " width=" + this.width;
	}
	//	else
	//		outStr += " width=100%"
	outStr += ">\r";
	outStr += "<tr><td width=" + this.width + ">\r";
	
	//	Add entries
	var indent = 0;
	
	//	Construct relative spacer image links
	var relURL = RelativeURL( siteRelSpacerImageURL, siteRelativePageUrl );
	var spacerImage = Replace( siteRelSpacerImage, siteRelSpacerImageURL, relURL );
	indentImage = Replace( spacerImage, 'width=1', 'width=888' );
	indentImage = indentImage.split( '888' );
	
	var vspaceImage = Replace( spacerImage, "height=1", "height=" + this.vspacePixels );
	
	var idx = 0;
	var itemText = "";
	
	//	Construct relative bullet image links
	relURL = RelativeURL( siteRelOpArrowNoSubsImageURL, siteRelativePageUrl );
	var iconNoSubs = Replace( siteRelOpArrowNoSubsImage, siteRelOpArrowNoSubsImageURL, relURL );
	
	relURL = RelativeURL( siteRelOpArrowWithSubsImageURL, siteRelativePageUrl );
	var iconWithSubs = Replace( siteRelOpArrowWithSubsImage, siteRelOpArrowWithSubsImageURL, relURL );
	
	var itemIcon = "";
	var bgColorString = "";
	for ( idx=0; idx<numItems; idx++ ) {
		indent = this.items[idx].yLevel;
		itemText = this.items[idx].Render( this );
		if ( itemText != "" ) {
			if ( ( this.items[idx].IsCurrentPage() ) && ( this.currentBgColor != "" ) ) {
				bgColorString = " bgcolor='" + this.currentBgColor + "'";
			} else {
				bgColorString = "";
			}
			outStr += "<table cellpadding=1 cellspacing=0 border=0>";
			outStr += "<tr valign=top>";
			//	Item indent
			if ( ( indent > 0 ) && ( this.indentPixels > 0 ) ) {
				outStr += "<td" + bgColorString + ">";
				//	outStr += "<td>"
				outStr += indentImage[0] + ( this.indentPixels * indent ) + indentImage[1];
				outStr += "</td>\r";
			}
			//	Item icon
			itemIcon = ( this.items[idx].hasSubs ) ? iconWithSubs : iconNoSubs;
			outStr += "<td" + bgColorString + ">";
			//	outStr += "<td>"
			outStr += itemIcon + "</td>";
			//	Item text
			outStr += "<td width=100%" + bgColorString + ">";
			//	outStr += "<<td width=100%>"
			outStr += itemText;
			outStr += "</td>";
			outStr += "</tr>";
			outStr += "</table>";
			outStr += "\r";
			if ( this.vspacePixels > 0 ) {
				outStr += "<table cellpadding=0 cellspacing=0 border=0>";
				outStr += "<tr><td>" + vspaceImage + "</td></tr>";
				outStr += "</table>\r";
			}
		}
	}
	
	//	Finish table
	outStr += "</td></tr>\r";
	outStr += "</table>\r";
	
	document.write( outStr );
}



