/*
JavaScript Application Cookbook
By Jerry Bradenbaugh
Publisher: O'Reilly
Series: Cookbooks
ISBN: 1-56592-577-7
*/
<HTML>
<HEAD>
<TITLE>The Slideshow</TITLE>
<!-- Define style sheet for simple height control //-->
<STYLE TYPE="text/css">
#menuConstraint { height: 800; }
</STYLE>
<SCRIPT LANGUAGE="JavaScript1.2">
<!--
// Set window- and layer-related variables
var dWidLyr = 450;
var dHgtLyr = 450;
var curSlide = 0;
var zIdx = -1;
var isVis = false;
// Set browser-determined global variables
var NN = (document.layers ? true : false);
var sWidPos = ((NN ? outerWidth : screen.availWidth) / 2) - (dWidLyr / 2);
var sHgtPos = ((NN ? outerHeight : screen.availHeight) / 2) - (dHgtLyr / 2);
var hideName = (NN ? 'hide' : 'hidden');
var showName = (NN ? 'show' : 'visible');
//Set image-related variables
var img = new Array();
var imgOut = new Array();
var imgOver = new Array();
var layerList = new Array();
var imgPath = 'images/';
// Set tour-realted variables
var showSpeed = 3500;
var tourOn = false;
// Define a function to generate layers
function genLayer(sName, sLeft, sTop, sWdh, sHgt, sVis, copy) {
if (NN) {
document.writeln('<LAYER NAME="' + sName + '" LEFT=' + sLeft + ' TOP=' + sTop +
' WIDTH=' + sWdh + ' HEIGHT=' + sHgt + ' VISIBILITY="' + sVis + '"' +
' z-Index=' + (++zIdx) + '>' + copy + '</LAYER>');
}
else {
document.writeln('<DIV ID="' + sName + '" STYLE="position:absolute; overflow:none; left:' +
sLeft + 'px; top:' + sTop + 'px; width:' + sWdh + 'px; height:' + sHgt + 'px;' +
' visibility:' + sVis + '; z-Index=' + (++zIdx) + '">' +
copy + '</DIV>'
);
}
}
// Define an object constructor for each slide
function slide(imgStr, scientific, copy) {
this.name = imgStr;
this.copy = copy;
this.structure =
'<TABLE WIDTH=500 CELLPADDING=10><TR><TD WIDTH=60% VALIGN=TOP>' +
'<IMG SRC=' + imgPath + imgStr + '.gif></TD>' +
'<TD WIDTH=40% VALIGN=TOP><H2>Common Name:</H2><H2><I>' +
camelCap(imgStr) + '</I></H2><H3>Scientific Name: </H3><H3><I>' +
scientific + '</I></H3>' + '<B>Abstract:</B><BR>' + copy + '</TD></TR></TABLE>';
// Preload corresponding images while we're at it
imagePreLoad(imgStr);
return this;
}
// Define a function to preload the images
function imagePreLoad(imgStr) {
// Images for the slides
img[img.length] = new Image();
img[img.length - 1].src = imgPath + imgStr + '.gif';
// Primary images for the slide menu
imgOut[imgOut.length] = new Image();
imgOut[imgOut.length - 1].src = imgPath + imgStr + 'out.gif';
// Rollover images for the slide menu
imgOver[imgOver.length] = new Image();
imgOver[imgOver.length - 1].src = imgPath + imgStr + 'over.gif';
}
// Define an array to store all of the slide objects
var slideShow = new Array(
new slide('bird', 'Bomb-zis Car-zes', 'This winged creature has been known to seek out and soil freshly-washed vehicles.'),
new slide('walrus', 'Verius Clueless', 'These big fellas good fishers, but toothbrushing is another story.'),
new slide('gator', 'Couldbeus Luggajus', 'These reptiles often play mascots for large college sporting events.'),
new slide('dog', 'Makus Messus', 'Man\'s best friend? Yeah, right. No wonder these mammals get a bad rep.'),
new slide('pig', 'Oinkus Lotsus', 'Humans with questionable eating habits are often compared to these farm creatures.'),
new slide('snake', 'Groovius Dudis', 'Slick and sly with a watchful eye.'),
new slide('reindeer', 'Redius Nosius', 'Though co-workers used to laugh and call him names, he eventually won the respect of the entire team.'),
new slide('turkey', 'Goosius Is Cooktis', 'Celebrated and revered for an entire year, then served as dinner shortly after.'),
new slide('cow', 'Gotius Milkus', 'This animal is considered a moover and shaker, and tends to milk things for all they\'re worth. Utterly shameful.'),
new slide('crane', 'Whooping It Upus', 'Not to be confused with a piece of heavy construction equipment. Rumored as the source of the nickname <I>birdlegs</I>.')
);
// Capitalize the first letter of the word passed
// Makes for better looking copy
function camelCap(str) {
return str.substring(0, 1).toUpperCase() + str.substring(1);
}
// This generates all layers (or styles) to display for the screen
function genScreen() {
var menuStr = '';
for (var i = 0; i < slideShow.length; i++) {
// Create all of the animal slide layers
genLayer('slide' + i, sWidPos, 45, dWidLyr, dHgtLyr, (i == 0 ? showName : hideName), slideShow[i].structure);
// While iterating, build the HTML string for the menu layer
menuStr += '<A HREF="" onMouseOver="hideStatus(); if(!tourOn) { setSlide(' + i + ');' +
' imageSwap(\'' + slideShow[i].name + '\', ' + i + ', true)}; return true;"' +
' onMouseOut="hideStatus(); if(!tourOn) { setSlide(' + i + ');' +
' imageSwap(\'' + slideShow[i].name + '\', ' + i + ', false)}; return true;"' +
' onClick="return false;"><IMG NAME="' + slideShow[i].name + '" SRC="' + imgPath + slideShow[i].name + 'out.gif" BORDER=0></A><BR>';
}
// Create the automation layer
genLayer('automation', sWidPos - 100, 11, 100, 200, showName,
'<DIV ID="menuConstraint">' +
'<A HREF="javascript: autoPilot();" onMouseOver="hideStatus(); return true;">' +
'<IMG SRC="images/automate.gif" BORDER=0></A>' +
'</DIV>'
);
// Create the guide layer (with the arrows)
genLayer('guide', sWidPos - 100, 30, 100, 200, showName,
'<DIV ID="menuConstraint">' +
'<A HREF="javascript: if(!tourOn) { changeSlide(-1); }" onMouseOver="hideStatus(); return true;">' +
'<IMG SRC="images/leftout.gif" BORDER=0></A>' +
'<A HREF="javascript: if(!tourOn) { menuManager(); }" onMouseOver="hideStatus(); return true;">' +
'<IMG SRC="images/guideout.gif" BORDER=0></A>' +
'<A HREF="javascript: if(!tourOn) { changeSlide(1); }" onMouseOver="hideStatus(); return true;">' +
'<IMG SRC="images/rightout.gif" BORDER=0></A></DIV>'
);
// Create the menu
genLayer('menu', sWidPos - 104, 43, 100, 200, hideName,
'<DIV ID="menuConstraint"><TABLE><TD>' +
menuStr + '</TD></TABLE></DIV>'
);
}
// Define a function to hide layers
function hideLayer(name) {
refLayer(name).visibility = hideName;
}
// Define a function to reveal layers
function showLayer(name) {
refLayer(name).visibility = showName;
}
// Define a central function to reference layers
function refLayer(name) {
if (NN) { return document.layers[name]; }
else { return eval('document.all.' + name + '.style'); }
}
// Hide or show the animal guide
function menuManager() {
if (isVis) { hideLayer('menu'); }
else { showLayer('menu'); }
isVis = !isVis;
}
// Function to change slides if the user navigates with the arrows
function changeSlide(offset) {
// Hide the existing Layer
hideLayer('slide' + curSlide);
// Calculate the next layer index number
curSlide = (curSlide + offset < 0 ? slideShow.length - 1 :
(curSlide + offset == slideShow.length ? 0 : curSlide + offset));
// Show the desired layer
showLayer('slide' + curSlide);
}
// Function to change the slide if user navigates with the menu
function setSlide(ref) {
if (tourOn) { return; }
hideLayer('slide' + curSlide);
curSlide = ref;
showLayer('slide' + curSlide);
}
// Image rollover function
function imageSwap(imagePrefix, imageIndex, isOver) {
if (isOver) { document[imagePrefix].src = imgOver[imageIndex].src; }
else { document[imagePrefix].src = imgOut[imageIndex].src; }
}
// Places an empty string in the status bar to avoid annoying URL displays
function hideStatus() { window.status = ''; }
// Start or stop the automated tour
function autoPilot() {
// Stop the tour if it is running
if (tourOn) {
clearInterval(auto);
imageSwap(slideShow[curSlide].name, curSlide, false);
}
// Otherwise begin the tour from the currently viewed slide
else {
auto = setInterval('automate()', showSpeed);
imageSwap(slideShow[curSlide].name, curSlide, true);
// Show the menu if it is not currrently visible
showLayer('menu');
visible = true;
}
tourOn = !tourOn;
}
// Automate the slideshow
function automate() {
// Incite the image rollver
imageSwap(slideShow[curSlide].name, curSlide, false);
// Incite the slide change
changeSlide(1);
// Incite the image rollver
imageSwap(slideShow[curSlide].name, curSlide, true);
}
//-->
</SCRIPT>
</HEAD>
<BODY BGCOLOR=WHITE>
<CENTER>
<FONT FACE=Arial>
<H2>Animal Kingdom Slideshow</H2>
</FONT>
</CENTER>
<SCRIPT LANGUAGE="JavaScript1.2">
<!--
genScreen();
//-->
</SCRIPT>
</FONT>
</BODY>
</HTML>
|