<!--

//****************************
//Draw thumbnail images frame.
//****************************

function DrawThumbs(docObj) 
{
    //*********************************************************
    //Arguments: docObj - document object receiving thumbnails.
    //*********************************************************

    this.isBusy = true;
    var spaceInt;
    var DQUOTE = '\"';
	var html = '';
    var thumbImageNbr;
	var thumbImageID;
	var thumbInfoID;
	var mouseOver = '';
	var mouseOut = '';

    html += '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">\n';
    html += '<head>\n';
    html += '<title>Thumbnails</title>\n';
	html += '<link rel="stylesheet" href="../PageStyle.css" type="text/css">\n';
    html += '<SCRIPT type="text/javascript" src="../slide.js"></SCRIPT>\n';
    html += '<SCRIPT type="text/javascript" src="' + PicList + '"></SCRIPT>\n';
    html += '<SCRIPT type="text/javascript" src="../slideshow.js"></SCRIPT>\n';
    html += '<STYLE type="text/css">\n';
    html += 'img {margin:5px 0px 5px 0px;}\n';
    html += '</STYLE>\n';
    html += '</head>\n';
    html += '\n';
	html += '<body>\n';
    html += '<center>\n';

    //********************
    //Show each thumbnail.
    //********************

    for (var t = 0; t < SlideArray.length; t++) 
        {
        if (SlideArray[t].imageHeadingLevel != 0)
            {
            html += '<div class="thumbCellHeading"><a id="Thumb' + t + '" href="#"> </a></div><div><h' + SlideArray[t].imageHeadingLevel + '><a href="#" onClick="top.ShowFrames(' + t + ');return false;">' + SlideArray[t].imageDescription + '</a></h' + SlideArray[t].imageHeadingLevel + '></div>\n';
            }
        else
            {
			thumbImageID = "ThumbImage" + t;
			thumbInfoID = "ThumbInfo" + t;

			mouseOver = " onmouseover=\"showLayer(\'" + thumbInfoID + "')\"";
			mouseOut = " onmouseout=\"hideLayer(\'" + thumbInfoID + "\')\"";

            html += '<div class="thumbCell"><a id="Thumb' + t + '" href="#"> </a>\n';
			html += '  <div id="' + thumbImageID + '"' + mouseOver + mouseOut + '>\n';
			html += '    <a href="#" onClick="top.UpdateSlide(' + t + ');return false;">\n';
            html += '      <img src="' + ThumbDir + SlideArray[t].imageName + '">\n';
			html += '    </a>\n';
			html += '  </div>\n';
			html += '  <div id="' + thumbInfoID + '" class="infoThumbs">\n';
            html += '    <div class="infoHeading">Slide: ' + (t+1) + '</div>\n';
            html += '    <div class="infoDetails">' + SlideArray[t].imageDate + ' - ' + SlideArray[t].imageName + '</div>\n';
            html += '    <div class="infoDescrip">' + SlideArray[t].imageDescription + '</div>\n';
			html += '  </div>\n';
            html += '</div>\n';
            }
        }

    html += '</center>\n';        
	html += '<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>\n';
    html += '</body>\n';
    html += '</html>\n';
    html += '\n';        

    docObj.open();
	docObj.write(html);
    docObj.close();
    this.isBusy = false;
}

//**********************************
//Show all pictures in tabular form.
//**********************************

function DrawGrid(docObj)
{
    //***************************************************
    //Arguments: docObj - document object receiving grid.
    //***************************************************

    this.isBusy = true;
	var t;
    var spaceInt;
    var DQUOTE = '\"';
	var html = '';
    var colNbr;
    var gridImageNbr;
	var gridImageID;
	var gridInfoID;
	var mouseOver = '';
	var mouseOut = '';

    //***************************************
    //Build html to show all thumbnails.
    //Note: build this before opening docObj.
    //***************************************

    html += '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">\n';
    html += '<head>\n';
    html += '<title>Grid</title>\n';
	html += '<link rel="stylesheet" href="../PageStyle.css" type="text/css">\n';
    html += '<SCRIPT type="text/javascript" src="../slide.js"></SCRIPT>\n';
    html += '<SCRIPT type="text/javascript" src="' + PicList + '"></SCRIPT>\n';
    html += '<SCRIPT type="text/javascript" src="../slideshow.js"></SCRIPT>\n';
    html += '</head>\n';
    html += '\n';
	html += '<body>\n';
    html += '<div align="left" style="position:absolute; left: 10px; top: 10px">\n';
    html += '<a href="#" onclick="GoHome()"><img src="../nav/home.gif" title="Home"></a>\n';
    html += '<a href="#" onclick="ShowFrames(0)"><img src="../nav/first.gif" title="Show Slides"></a>\n';
    html += '</div>\n';
    html += '<div align="center">\n';
    html += '<font size="+2">' + AlbumTitle + '</font></div>\n';
    html += '<div align="center">\n';
    html += '<table border="1">\n';
    html += '<col align="center" width="128">\n';

    colNbr = 0;
    gridImageNbr = 1;
    for (t = 0; t < SlideArray.length; t++) 
        {
        if (colNbr == 0)
            {
			html += '\n<tr class="gridRow">\n';
            }

        if (SlideArray[t].imageHeadingLevel != 0)
            {
            html += '  <td class="gridCellHeading"><a href="#" onclick="return ShowFrames(' + t + ')">' + SlideArray[t].imageDescription + '</a></td>\n';
            }
        else
            {
			gridImageID = "GridImage" + t;
			gridInfoID = "GridInfo" + t;

			mouseOver = " onmouseover=\"showLayer(\'" + gridInfoID + "')\"";
			mouseOut = " onmouseout=\"hideLayer(\'" + gridInfoID + "\')\"";

            html += '  <td class="gridCell">\n';
			html += '    <div id="' + gridImageID + '"' + mouseOver + mouseOut + '>\n';
            html += '      <a href="#" onclick="return ShowFrames(' + t + ')">\n';
            html += '        <img src="' + ThumbDir + SlideArray[t].imageName + '" border="0">\n';
            html += '      </a>\n';
			html += '    </div>\n';
			html += '    <div id="' + gridInfoID + '" class="information">\n';
            html += '      <div class="infoHeading">Slide: ' + (t+1) + '</div>\n';
            html += '      <div class="infoDetails">' + SlideArray[t].imageDate + ' - ' + SlideArray[t].imageName + '</div>\n';
            html += '      <div class="infoDescrip">' + SlideArray[t].imageDescription + '</div>\n';
			html += '    </div>\n';
            html += '  </td>\n';

            gridImageNbr++;
            SlideArray[t].imageGridNbr = gridImageNbr;
            }

        colNbr++;
        if ((colNbr >= 6) || (t == SlideArray.length - 1))
            {
            html += '</tr>\n';
            colNbr = 0;
            }
        }

    html += '</table>\n';

    html += '</div>\n';
	html += '<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>\n';
    html += '</body>\n';
    html += '</html>\n';
    html += '\n';

    docObj.open();
	docObj.write(html);
    docObj.close();
    this.isBusy = false;
}

//************************
//Custom ButtonSet object.
//************************

function DrawButtons(docObj) 
{
    //********************************************************
    //Method of ButtonSet object.
    //Arguments: docObj - document object receiving ButtonSet.
    //********************************************************

    this.isBusy = true;
    var spaceInt;
    var DQUOTE = '\"';
	var html = '';

    html += '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">\n';
    html += '<head>\n';
    html += '<title>Toolbar</title>\n';
	html += '<link rel="stylesheet" href="../PageStyle.css" type="text/css">\n';
    html += '<SCRIPT type="text/javascript">\n';
    html += '</SCRIPT>\n';
    html += '</head>\n';
    html += '\n';
	html += '<body>\n';
    html += '<div align="center">\n';
    html += '<table width="100%" border="0">\n';
    html += '<tr><td align="center">';

    //********************************************
    //Draw each button. Start at property index i.
    //********************************************

    for (var i = this.startIndex; this.length > i; i++) 
        {
        if (eval(this[i].condition)) 
            {
            html += '<a href=\"' + this[i].url + '\">';
            html += '<img src=\"' + this[i].file + '\" title="' + this[i].title + '\" width="24" height="24" border="0">';
            html += '</a>';

            //***********************
            //Add space if specified.
            //***********************

            spaceInt = 0 + this[i].spacer;
            if (spaceInt > 0) 
                {
                html += '<img src="nav/space.gif" width=\"' + spaceInt + '\" height="24" border="0">';
                }

			if (spaceInt < 0)
				{
				html += '<br>';
				}
            }
        }
    html += '</td></tr></table>\n';
    html += '</div>\n';        
    html += '</body>\n';
    html += '</html>\n';
    html += '\n';

    docObj.open();
	docObj.write(html);
    docObj.close();
    this.isBusy = false;
}

function Button(name, file, title, url, spacer, condition, command) 
{
    //**********************************************************
    //Button object.
    //Arguments: 
    //  name - The name used as this button's HTML element name.
    //  file - The button image's source url.
    //  title - The title attribute for the button.
    //  url - The url which can reference(across frames) the
    //        ButtonSet that holds this button.
    //  spacer - number of pixels of horizontal spacing used
    //           after the button being added.
    //  condition - conditional statement that determines
    //              whether or not to display this button.
    //  commmand - The command to be executed by this button.
    //**********************************************************

    //***********
    //Properties.
    //***********

    this.name = name
    this.file = file
    this.title = title
    this.url = url
    this.spacer = spacer
    this.condition = condition
    this.command = command

    //********
    //Methods.
    //********

    this.Click = Click

    return this
}

//*********************
//Custom button object.
//*********************

function Click() 
{
    //***************************************************
    //Method of Button. Executes command for this button.
    //***************************************************

    eval(this.command);
}

function Clear() 
{
    //*****************************************************************
    //Description: Method of ButtonSet object. Used to reset any global
    //             variables on which any buttons in the ButtonSet rely
    //             on for their condition statements.
    //*****************************************************************

    gIsRunning = false;

}

function AddBtn(name, file, title, spacer, condition, command) 
{
  //****************************************************************************
  //Description: Method of the ButtonSet object used to add a new button to
  //             the end of the button set.
  //Arguments: name - (string) The name used as this button's HTML element name.
  //           file - (string) The button image's source url.
  //           title - (string) The title attribute for the button.
  //           spacer - (integer) number of pixels of horizontal spacing used
  //                    after the button being added.
  //           condition - (string) conditional statement determines
  //                       whether or not to display the button.
  //           commmand - (string) The command to be executed.
  //****************************************************************************

   var t = this.length;

   this[t] = new Button(name,
                        file,
                        title,
                        "javascript:top." + this.name + "[" + t + "]" + ".Click()",
                        spacer,
                        condition,
                        command);

   this.length = t + 1;
}

function ButtonSet(name) 
{
  //*****************************************************
  //Description: button object constructor.
  //Arguments: name - The variable name of the ButtonSet.
  //*****************************************************

   //***********
   //Properties.
   //***********

   this.name = name;
   this.startIndex = 0;
   this.length = 0;
   this.isBusy = false;

   //********
   //Methods.
   //********

   this.AddBtn = AddBtn;
   this.DrawButtons = DrawButtons;
   this.Clear = Clear;

   return this;
}

function StartAuto() 
{
    //********************
    //Start a "slideshow".
    //********************

    ChangeSlide("forward")
    gTimer = setTimeout("StartAuto()", SlideShowTimeInterval)
}

function ChangeSlide(command) 
{
    //*******************************************************************
    //Description: Used to move through the array of slides.
    //Arguments: command - An action to take against the array of slides.
    //*******************************************************************

    if (Toolbar.isBusy) 
        return;

	if (CurrentSlide != NextSlide)
		return;

    if (command == "first") 
        {
        for (var t = 0; SlideArray[t].imageHeadingLevel != 0; t++)
            ;
        top.UpdateSlide(t)
        }

    if (command == "back") 
        {
        if (CurrentSlide == 0) 
            {
            CurrentSlide = SlideArray.length;
            }
        for (var t = CurrentSlide - 1; SlideArray[t].imageHeadingLevel != 0; t--)
            {
            if (t == 0)
            	t = SlideArray.length;
			}
        top.UpdateSlide(eval(t))
        }

    if (command == "forward") 
        {
        if (CurrentSlide == SlideArray.length - 1) 
            {
            CurrentSlide = -1;
            }
        for (var t = CurrentSlide + 1; SlideArray[t].imageHeadingLevel != 0; t++)
            {
            if (t == SlideArray.length - 1)
            	t = -1;
			}
        top.UpdateSlide(eval(t))
        }

    if (command == "last") 
        {
        for (var t = SlideArray.length - 1; SlideArray[t].imageHeadingLevel != 0; t--)
            ;
        top.UpdateSlide(eval(t))
        }

    if (command == "start") 
        {
        gIsRunning = true;
        Toolbar.DrawButtons(top.navigationFrame.document);
        gTimer = top.setTimeout("StartAuto()", SlideShowTimeInterval);
        }

    if (command == "stop") 
        {
        top.clearTimeout(gTimer);
        gIsRunning = false;
        Toolbar.DrawButtons(top.navigationFrame.document);
        }

    if (command == "first") 
        top.ScrollToThumbnail(0);
    else if (command == "last") 
        top.ScrollToThumbnail(SlideArray.length - 1);
    else
        top.ScrollToThumbnail(CurrentSlide);

    //    top.thumbsFrame.location.hash = "Thumb" + CurrentSlide;
}

function UpdateSlide(SlideNumber)
{
    var gridImageNbr;

    NextSlide = SlideNumber;

    PortraitLabelText.replaceData(0, 9999, "");
    LandscapeLabelText.replaceData(0, 9999, "");

    top.mainFrame.document.bigimage.src = RootDir + ImageDir + SlideArray[SlideNumber].imageName;

    while (! top.mainFrame.document.bigimage.complete)
    	;

    gridImageNbr = SlideArray[SlideNumber].imageGridNbr;
    if (top.gridFrame.document.images[gridImageNbr].width < top.gridFrame.document.images[gridImageNbr].height)
        PortraitLabelText.appendData(SlideArray[SlideNumber].imageDescription);
    else
        LandscapeLabelText.appendData(SlideArray[SlideNumber].imageDescription);

    SlideShowTimeInterval = (SlideArray[SlideNumber].imageDescription.length * 50) + 1500;

    CurrentSlide = SlideNumber;
}

function ShowIntroSlide()
{
    PortraitLabelText.replaceData(0, 9999, "");
    LandscapeLabelText.replaceData(0, 9999, "");

    top.mainFrame.document.bigimage.src = RootDir + ImageDir + IntroSlide.imageName;

    if (top.mainFrame.document.bigimage.width < top.mainFrame.document.bigimage.height)
        PortraitLabelText.appendData(IntroSlide.imageDescription);
    else
        LandscapeLabelText.appendData(IntroSlide.imageDescription);
}

function ScrollToThumbnail(slideNumber)
{
    var anchorName = "Thumb" + slideNumber;
    var coords = new Object();

    coords.x = 0;
    coords.y = 0;

    coords = getAnchorPosition(top.thumbsFrame.document, anchorName);
    top.thumbsFrame.scrollTo(coords.x, coords.y);
}

// The following anchor position functions were modified and used with permission from:
// Author: Matt Kruse <matt@mattkruse.com>
// WWW: http://www.mattkruse.com/
function getAnchorPosition(doc, anchorName)
{
    // This function will return an Object with x and y properties which are the coordinates of the named anchor, relative to the page.
    var coordinates=new Object();
    var x=0;
    var y=0;

    // Browser capability sniffing
    var use_gebi=false;
    var use_css=false;
    var use_layers=false;

    if (doc.getElementById)
        {
        use_gebi=true;
        }
    else if (doc.all)
        {
        use_css=true;
        }
    else if (doc.layers)
        {
        use_layers=true;
        }

    // Logic to find position
    if (use_gebi && doc.all)
        {
        x=AnchorPosition_getPageOffsetLeft(doc.all[anchorName]);
        y=AnchorPosition_getPageOffsetTop(doc.all[anchorName]);
        }
    else if (use_gebi)
        {
        var anchorElement=doc.getElementById(anchorName);
        x=AnchorPosition_getPageOffsetLeft(anchorElement);
        y=AnchorPosition_getPageOffsetTop(anchorElement);
        }
    else if (use_css)
        {
        x=AnchorPosition_getPageOffsetLeft(doc.all[anchorName]);
        y=AnchorPosition_getPageOffsetTop(doc.all[anchorName]);
        }
    else if (use_layers)
        {
        var found=0;
        for (var i=0; i < doc.anchors.length; i++)
            {
            if (doc.anchors[i].name==anchorName)
                {
                found=1;
                break; 
                }
            }
        if (found == 0) 
            {
            coordinates.x=0; 
            coordinates.y=0; 
            return coordinates;
            }
        x=doc.anchors[i].x;
        y=doc.anchors[i].y;
        }
    else 
        {
        coordinates.x=0; 
        coordinates.y=0; 
        return coordinates;
        }

    coordinates.x=x;
    coordinates.y=y;
    return coordinates;
}

function AnchorPosition_getPageOffsetLeft (element) 
{
    var ol=element.offsetLeft;
    while ((element=element.offsetParent) != null) 
        {
        ol += element.offsetLeft; 
        }

    return ol;
}

function AnchorPosition_getPageOffsetTop (element) 
{
    var ot=element.offsetTop;
    while((element=element.offsetParent) != null) 
        {
        ot += element.offsetTop; 
        }

    return ot;
}

function InitializeFrames()
{
    var t;
	var slideNumber;

    var mybody = top.mainFrame.document.getElementsByTagName("body").item(0);
    var mytable = mybody.getElementsByTagName("table").item(0);
    var mytablebody = mytable.getElementsByTagName("tbody").item(0);

    var PortraitLabelRow = mytablebody.getElementsByTagName("tr").item(0);
    var PortraitLabelCell = PortraitLabelRow.getElementsByTagName("td").item(1);

    var LandscapeLabelRow = mytablebody.getElementsByTagName("tr").item(1);
    var LandscapeLabelCell = LandscapeLabelRow.getElementsByTagName("td").item(0);

    PortraitLabelText = PortraitLabelCell.childNodes.item(0);
    LandscapeLabelText = LandscapeLabelCell.childNodes.item(0);

    //imgMain.onload = ImageReady;
    //imgMain.onerror = ImageError; 

    //imgIntro.onload = IntroReady;
    //imgIntro.onerror = IntroError; 

    Toolbar.DrawButtons(top.navigationFrame.document);
    DrawThumbs(top.thumbsFrame.document);
    DrawGrid(top.gridFrame.document);

	if (top.location.search)
		{
		if (t = top.location.search.search("slide="))
			{
			slideNumber = eval(top.location.search.slice(t + 6, top.location.search.length));
			ShowFrames(slideNumber);
			}
		}
	else
    	ShowIntroSlide();
}

function ShowGrid()
{
    top.document.body.cols = "0,0,*";
}

function ShowJournal()
{
    top.location = JournalPage;
}

function GoHome()
{
    top.location = "../index.htm#" + HomeAnchor;
}

function ShowFrames(slideNumber)
{
    var t;

    top.document.body.cols = "240,*,0";

    for (t = slideNumber; SlideArray[t].imageHeadingLevel != 0; t++)
        ;
    top.UpdateSlide(t);
    top.ScrollToThumbnail(t);

    return false;
}

function showLayer(infoID)
{
    if (document.getElementById) // Netscape 6 and IE 5+
        {
        var infoElement = document.getElementById(infoID);
        infoElement.style.display = 'block';
        }
}

function hideLayer(infoID)
{
    if (document.getElementById) 
    	{
        var infoElement = document.getElementById(infoID);
        infoElement.style.display = 'none';
    	}
}

//*****************************************************
//Code executed once when the page is initially loaded.
//*****************************************************

//**************************************************
//Create a new ButtonSet for use in the lower frame.
//**************************************************

var gIsRunning = false;
Toolbar = new ButtonSet("Toolbar");
Toolbar.Clear();

//***************************
//Add each button to Toolbar.
//***************************

Toolbar.AddBtn("Home","../nav/home.gif","Home",0,"true","GoHome()");
Toolbar.AddBtn("Journal","../nav/journal.gif","Show Journal",0,"true","ShowJournal()");
Toolbar.AddBtn("Grid","../nav/grid.gif","Show Grid",0,"true","ShowGrid()");
Toolbar.AddBtn("Start","../nav/auto.gif","Start Slideshow",0,"gIsRunning==false","ChangeSlide('start')");
Toolbar.AddBtn("StartGrey","../nav/autogrey.gif","Start Slideshow",0,"gIsRunning==true","");
Toolbar.AddBtn("Stop","../nav/stop.gif","Stop Slideshow",-1,"gIsRunning==true","ChangeSlide('stop')");
Toolbar.AddBtn("StopGrey","../nav/stopgrey.gif","Stop Slideshow",-1,"gIsRunning==false","");

Toolbar.AddBtn("First","../nav/first.gif","First Picture",0,"true","ChangeSlide('first')");
Toolbar.AddBtn("Previous","../nav/back.gif","Previous Picture",0,"true","ChangeSlide('back')");
Toolbar.AddBtn("Next","../nav/forward.gif","Next Picture",0,"true","ChangeSlide('forward')");
Toolbar.AddBtn("Last","../nav/last.gif","Last Picture",0,"true","ChangeSlide('last')");

//*****************
//Global variables.
//*****************

var ImageDir = "Images/";
var ThumbDir = "Thumbs/";
var SlideShowTimeInterval = 100;

var CurrentSlide = 0;
var NextSlide = 0;

//var imgIntro = new Image();
//var imgMain = new Image();
//var imgSource;
var PortraitLabelText;
var LandscapeLabelText;
// end the hiding comment --> 
