//
// $Id: webmagick.js,v 1.46 2002/09/25 01:00:21 clindell Exp $
//
// JavaScript routines to display a set of images
// Part of the WebMagick package
// Copyright 1997, 1998, Bob Friesenhahn
//
// Start with first page (zero based)
var pageNumber = 0;
// Start with first image on page
var pageImageIndex = 0;
//
// Window size hints
var browserWindowWidth = 800;
var browserWindowHeight = 500;
// Netscape 4.X
if( parent.innerWidth && parent.innerHeight) {
browserWindowWidth = parent.innerWidth;
browserWindowHeight = parent.innerHeight;
}
//alert('Width: ' + browserWindowWidth + ' Height: ' + browserWindowHeight);
//PMF: Values for the timers for the slide show
var timerNumber = 0;
var timerChoice = new Array;
var timerChoiceValue = new Array;
timerChoice[0] = "chose delay for slide show";
timerChoice[1] = "2 sec/picture";
timerChoice[2] = "5 sec/picture";
timerChoice[3] = "10 sec/picture";
timerChoice[4] = "20 sec/picture";
timerChoice[5] = "pause";
timerChoiceValue[0] = "100000";
timerChoiceValue[1] = "2";
timerChoiceValue[2] = "5";
timerChoiceValue[3] = "10";
timerChoiceValue[4] = "20";
timerChoiceValue[5] = "100000";
var selectDisabled = 0;
var TimerID =0;
//PMF: values for the resolution that will be used
//var resolNumber = 1;
//var resolChoice = new Array;
//var resolChoiceValue = new Array;
//resolChoice[0] = "chose a resolution";
//resolChoice[1] = "640x480";
//resolChoice[2] = "max size";
//resolChoiceValue[0] = "";
//resolChoiceValue[1] = ".640x480/";
//resolChoiceValue[2] = "";
//var resolution = resolChoiceValue[resolNumber];
var resolution = "";
if (htmlOpts["lowres"])
{
resolution = htmlOpts["lowresdir"] + '/';
}
///////////////////////////////////////////////////
//
// Routines and variables for the master frame definition
//
///////////////////////////////////////////////////
// Define window names based on frame style option
var frameTargets = new Object();
var origFramestyle = htmlOpts["framestyle"];
var origColumns = htmlOpts["columns"];
var origRows = htmlOpts["rows"];
var today = new Date();
var expires_date = new Date(today.getYear() + 1,today.getMonth(),today.getDate(),0,0,0);
// for testing
//Set_Cookie('framestyle', '2', expires_date);
//Set_Cookie('columns', '2', expires_date);
//Set_Cookie('rows', '3', expires_date);
// Should check to see if all of these are needed
if (htmlOpts["config"] && htmlOpts["config"] != 0 && htmlOpts["tables"]) {
if (Get_Cookie('framestyle') != null) {
htmlOpts["framestyle"] = Get_Cookie('framestyle');
if (htmlOpts["framestyle"] != origFramestyle) {
// reset the cookie to increase the expiration
// should do something about the path, but I'm not sure what - one of our current options?
Set_Cookie('frameStyle', htmlOpts["framestyle"], expires_date);
}
}
if (Get_Cookie('rows') != null) {
htmlOpts["rows"] = Get_Cookie('rows');
if (htmlOpts["rows"] != origRows) {
Set_Cookie('rows', htmlOpts["rows"], expires_date);
}
}
if (Get_Cookie('columns') != null) {
htmlOpts["columns"] = Get_Cookie('columns');
if (htmlOpts["columns"] != origColumns) {
Set_Cookie('columns', htmlOpts["columns"], expires_date);
}
}
if ((htmlOpts["rows"] != origRows) || (htmlOpts["columns"] != origColumns)) {
var totalCount = 0;
for (i = 0; i < imageNames.length; i++) {
for (j = 0; j < imageNames[i].length; j++) {
totalCount++;
}
}
var perPage = htmlOpts["rows"] * htmlOpts["columns"];
var remainder = totalCount % perPage;
htmlOpts["numpages"] = Math.floor(totalCount / perPage);
if (remainder != 0) {
htmlOpts["numpages"]++;
}
imLabels = fixDoubleArray(imLabels, remainder);
thumbwidths = fixDoubleArray(thumbwidths, remainder);
thumbheights = fixDoubleArray(thumbheights, remainder);
imageNames = fixDoubleArray(imageNames, remainder);
// why does this run twice????
//alert ('imageNames ' + imageNames[0]);
}
}
// config only works with tables
if (htmlOpts["config"] && !htmlOpts["tables"]) {
htmlOpts["config"] = 0;
}
// Set number of display windows based on framestyle option
var numWindows = 3; // default for framestyle 1
if( htmlOpts["framestyle"] == 2 ||
htmlOpts["framestyle"] == 3 ||
htmlOpts["framestyle"] == 4) {
numWindows = 4;
}
// Set window names based on number of display windows
if( numWindows == 3 ) {
// One window plays triple duty when there are only two frames
frameTargets["dirview"] = 'dirview';
frameTargets["imageview"] = 'imageview';
frameTargets["navview"] = 'navview';
frameTargets["readmeview"] = 'imageview';
frameTargets["thumbview"] = 'imageview';
}
else if( numWindows == 4 ) {
// When there are four frames, only the README shares a window
frameTargets["dirview"] = 'dirview';
frameTargets["imageview"] = 'imageview';
frameTargets["navview"] = 'navview';
frameTargets["readmeview"] = 'imageview';
frameTargets["thumbview"] = 'thumbview';
}
function emptyHTML()
{
return '
';
}
function drawWindows()
{
var style = htmlOpts["framestyle"];
// Is README actually displayed?
if( ( htmlOpts["readmepresent"] == 1 && htmlOpts["numpages"] == 0 )
|| htmlOpts["readmevisible"] == 1 ) {
var showReadme = 1;
} else {
var showReadme = 0;
}
if( style == 1 ) {
displayResult(frameTargets["dirview"], returnDirectoryHTML());
displayResult(frameTargets["navview"], returnNavHTML(0));
if (showReadme != 1) {
displayResult(frameTargets["imageview"], returnThumbNailsHTML());
}
} else if (style == 2) {
displayResult(frameTargets["dirview"], returnDirectoryHTML());
displayResult(frameTargets["thumbview"], returnThumbNailsHTML());
displayResult(frameTargets["navview"], returnNavHTML(0));
if (showReadme != 1) {
displayResult(frameTargets["imageview"], returnImageHTML(0));
}
} else if (style == 3) {
displayResult(frameTargets["dirview"], returnDirectoryHTML());
displayResult(frameTargets["thumbview"], returnThumbNailsHTML());
displayResult(frameTargets["navview"], returnNavHTML(0));
if (showReadme != 1) {
displayResult(frameTargets["imageview"], returnImageHTML(0));
}
} else if (style == 4) {
displayResult(frameTargets["thumbview"], returnThumbNailsHTML());
displayResult(frameTargets["navview"], returnNavHTML(0));
displayResult(frameTargets["dirview"], returnDirectoryHTML());
if (showReadme != 1) {
displayResult(frameTargets["imageview"], returnImageHTML(0));
}
}
}
function displayResult(target, result)
{
var theFrame = open("", target);
theFrame.document.writeln(result);
theFrame.document.close();
}
function returnFrameHTML()
{
var style = htmlOpts["framestyle"];
// Is README actually displayed?
if( ( htmlOpts["readmepresent"] == 1 && htmlOpts["numpages"] == 0 )
|| htmlOpts["readmevisible"] == 1 ) {
var showReadme = 1;
} else {
var showReadme = 0;
}
// frame border definition
var frameBorderSize =
' FRAMEBORDER=' + htmlOpts["frameborder"] + ' BORDER=' + htmlOpts["framebordersize"];
// margin width definition
var marginBorderSize =
' MARGINWIDTH=' + htmlOpts["framemarginwidth"] + ' MARGINHEIGHT=' + htmlOpts["framemarginheight"];
// Javascript URLs to generate frame source
var srcDirectory = ' SRC="javascript:parent.emptyHTML();"';
var srcHidden = ' SRC="' + htmlOpts["jspageindex"] + '"';
var srcImageView = ' SRC="javascript:parent.emptyHTML();"';
var srcNavView = ' SRC="javascript:parent.emptyHTML();"';
var srcReadMe = ' SRC="' + htmlOpts["readme"] + '"';
var srcThumbnails = ' SRC="javascript:parent.emptyHTML();"';
// frame names
var nameDirView = ' NAME="' + frameTargets["dirview"] + '"';
var nameHidden = ' NAME="webmagick"';
var nameImageView = ' NAME="' + frameTargets["imageview"] + '"';
var nameNavView = ' NAME="' + frameTargets["navview"] + '"';
var nameThumbView = ' NAME="' + frameTargets["thumbview"] + '"';
var result =
'\n' +
'\n' +
'' + htmlOpts["title"] + '\n';
if (htmlOpts["stylesheet"])
result += '\n';
result += '\n';
if( style == 1 ) {
// Three frame screen with directories listed in the
// top-left frame, navigation icons displayed in top right frame,
// and imagemap or README (dual-use) displayed in the bottom frame.
//
// -------------
// | | |
// |-------------|
// | |
// | |
// | |
// | |
// -------------
result +=
'\n';
} else if ( style == 2 ) {
// Four frame screen with directories listed in top-left frame,
// image navigation icons in top right frame, imagemap displayed
// in bottom-left frame, and README/Images displayed in
// full-height right-hand frame.
// -------------
// | |----------|
// | | |
// |--| |
// | | |
// | | |
// | | |
// -------------
result +=
'\n' +
' \n' +
' \n' +
' \n' +
' \n' +
' \n' +
' \n';
if( showReadme == 1 ) {
result += ' \n';
} else {
result += ' \n';
}
result +=
' \n' +
' \n' +
'\n';
} else if ( style == 3 ) {
// Four frame screen with directories listed in left frame,
// imagemap displayed in top-right frame, and README/Images
// displayed in lower-right frame.
// -------------
// | | |
// |--+----------|
// |--+----------|
// | |
// | |
// | |
// -------------
result +=
'\n' +
' \n' +
' \n' +
' \n' +
' \n' +
' \n' +
' \n';
if( showReadme == 1 ) {
result += ' \n';
} else {
result += ' \n';
}
result +=
'\n';
} else if ( style == 4 ) {
// Four frame screen with imagemap displayed in top frame,
// directories in left-center frame, image navigation icons in
// right-center frame, and README/Images displayed in bottom
// frame.
// -------------
// | |
// |-------------|
// | | |
// |-------------|
// | |
// | |
// -------------
result +=
'\n' +
' \n' +
' \n' +
' \n' +
' \n' +
' \n' +
' \n';
if( showReadme == 1 ) {
result += ' \n';
} else {
result += ' \n';
}
result +=
'\n';
}
result += '\n';
//alert(result);
return result;
}
///////////////////////////////////////////////////
//
// Routines and variables for the 'navview' frame
//
///////////////////////////////////////////////////
var navViewWindow;
//PMF: helper function to kill the current timer
function killSlideShowTimer(){
clearTimeout(TimerID);
}
//PMF: helper function to find the value of the timer selection
function closeselect(numChoice){
var choice;
if ((selectDisabled) || (numChoice <= 0) || (numChoice >= timerChoiceValue.length)) {
selectDisabled = 0;
choice = timerChoiceValue[timerNumber] *1000;
} else if (numChoice < timerChoiceValue.length) {
timerNumber = numChoice;
choice = timerChoiceValue[numChoice] *1000;
} else {
//a very large number, so that it lasts forever
timerNumber = numChoice;
choice = 100000;
}
return choice;
}
function returnNavImageHTML()
{
var result = '
\n';
result += '
\n';
// up arrow -- only displayed if three-frame style
if( htmlOpts["framestyle"] == 1 ) {
result +=
'\n';
}
// if we have more than one image then display image nav buttons
if(imageNames[pageNumber].length > 1 || imageNames.length > 1) {
// preceding image arrow
// if not first page or first page and not first image in page
if( (pageNumber > 0) || (pageNumber == 0 && pageImageIndex > 0) ) {
result +=
'\n';
} else {
result +=
'\n';
}
// next image arrow
// if not last page or last page and not last image in page
if( (pageNumber < imageNames.length - 1) ||
(pageNumber == imageNames.length - 1 &&
pageImageIndex < imageNames[pageNumber].length - 1 ) ) {
result +=
'\n';
//PMF: include a pause button
// result +=
// '\n';
//PMF: include a timer to go to the next picture
result += '
\n';
// result += ' slide show: ';
result += '';
result +=
'';
//PMF: select the resolution
// result += '\n';
}else {
result +=
'\n';
}
} // end of if we have one more image
result += '
\n';
result += '
\n';
return result;
}
function returnNavThumbHTML()
{
var result = '';
// if no images then return empty page
if( imageNames[pageNumber].length == 0 ) {
return result;
}
if( htmlOpts["numpages"] > 1 ) {
// start of table
result += '
\n
\n';
// start navigation row
result += '
\n' ;
result += '
\n';
// preceding page
if( pageNumber == 0 ) {
// first page + no preceding
result +=
'\n';
} else {
// have preceding
result += '\n';
}
result += '
\n';
// select specific page
result += '
\n';
result += '\n';
result += '
\n';
// next page
result += '
\n';
if( pageNumber == htmlOpts["numpages"] - 1 ) {
// already on last page
result +=
'\n';
} else {
// more to go
result +=
'\n';
}
result +=
'
\n'+
'
\n' +
'
\n' +
'
\n \n';
} // End of code for multiple thumbnail pages
return result;
}
function returnNavHTML()
{
// page header
var result =
'\n' +
'\n' ;
if (htmlOpts["stylesheet"])
{
result += '\n';
result += '\n\n';
}
else
{
result += '\n' +
'\n';
}
//alert('returnNavHTML(): thumbNailMode=' + thumbNailMode);
if( htmlOpts["framestyle"] == 1 && thumbNailMode == true) {
result += returnNavThumbHTML();
} else {
result += returnNavImageHTML();
}
result +=
'\n' +
'\n' ;
return result;
}
///////////////////////////////////////////////////
//
// Routines and variables for the 'imageview' frame
//
///////////////////////////////////////////////////
// Image descriptions for image extensions
var imageExtensions = new Object();
imageExtensions['avs'] = 'AVS X image file';
imageExtensions['bie'] = 'Joint Bi-level Image experts Group file interchange format';
imageExtensions['bmp'] = 'Microsoft Windows bitmap image file';
imageExtensions['cgm'] = 'Computer Graphics Metafile';
imageExtensions['dcm'] = 'DICOM Medical image file';
imageExtensions['dcx'] = 'ZSoft IBM PC multi-page Paintbrush file';
imageExtensions['dib'] = 'Microsoft Windows bitmap image file';
imageExtensions['dot'] = 'Graphviz (DOT) file';
imageExtensions['dvi'] = 'TeX DVI file';
imageExtensions['epdf'] = 'Encapsulated Portable Document Format';
imageExtensions['epi'] = 'Adobe Encapsulated PostScript Interchange format';
imageExtensions['eps'] = 'Adobe Encapsulated PostScript file';
imageExtensions['eps2'] = 'Adobe Level II Encapsulated PostScript file';
imageExtensions['epsf'] = 'Adobe Encapsulated PostScript file';
imageExtensions['epsi'] = 'Adobe Encapsulated PostScript Interchange format';
imageExtensions['ept'] = 'Adobe Encapsulated PostScript with TIFF preview';
imageExtensions['fax'] = 'Group 3 FAX';
imageExtensions['fig'] = 'Xfig file';
imageExtensions['fits'] = 'Flexible Image Transport System';
imageExtensions['fpx'] = 'FlashPix Format';
imageExtensions['g3'] = 'Group 3 FAX';
imageExtensions['gif'] = 'CompuServe graphics interchange format';
imageExtensions['gplt'] = 'GNUPLOT plot file';
imageExtensions['hdf'] = 'Hierarchical Data Format';
imageExtensions['hpgl'] = 'HP-GL plotter file';
imageExtensions['ico'] = 'Microsoft icon';
imageExtensions['im1'] = 'SUN Rasterfile (1 bit)';
imageExtensions['im24'] = 'SUN Rasterfile (24 bit)';
imageExtensions['im8'] = 'SUN Rasterfile (8 bit)';
imageExtensions['jbg'] = 'Joint Bi-level Image experts Group file interchange format';
imageExtensions['jbig'] = 'Joint Bi-level Image experts Group file interchange format';
imageExtensions['jpeg'] = 'Joint Photographic Experts Group JFIF format';
imageExtensions['jpg'] = 'Joint Photographic Experts Group JFIF format';
imageExtensions['m2v'] = 'Motion Picture Experts Group file interchange format';
imageExtensions['man'] = 'Manual page';
imageExtensions['miff'] = 'Magick image file format';
imageExtensions['mng'] = 'Multiple-image Network Graphics';
imageExtensions['mpeg'] = 'Motion Picture Experts Group file interchange format';
imageExtensions['mpg'] = 'Motion Picture Experts Group file interchange format';
imageExtensions['mtv'] = 'MTV Raytracing image format';
imageExtensions['p7'] = 'Xv thumbnail format';
imageExtensions['pbm'] = 'Portable bitmap format (black and white)';
imageExtensions['pcd'] = 'Photo CD';
imageExtensions['pcds'] = 'Photo CD';
imageExtensions['pcx'] = 'ZSoft IBM PC Paintbrush file';
imageExtensions['pdf'] = 'Portable Document Format';
imageExtensions['pgm'] = 'Portable graymap format (gray scale)';
imageExtensions['pic'] = 'Apple Macintosh QuickDraw/PICT file';
imageExtensions['pict'] = 'Apple Macintosh QuickDraw/PICT file';
imageExtensions['pix'] = 'Alias/Wavefront RLE image format';
imageExtensions['png'] = 'Portable Network Graphics';
imageExtensions['pnm'] = 'Portable anymap';
imageExtensions['pov'] = 'Persistance Of Vision file';
imageExtensions['ppm'] = 'Portable pixmap format (color)';
imageExtensions['ps'] = 'Adobe PostScript file';
imageExtensions['psd'] = 'Adobe Photoshop bitmap file';
imageExtensions['rad'] = 'Radiance image format';
imageExtensions['rla'] = 'Alias/Wavefront image file';
imageExtensions['rle'] = 'Utah Run length encoded image file';
imageExtensions['sgi'] = 'Irix RGB image file';
imageExtensions['sun'] = 'SUN Rasterfile';
imageExtensions['tga'] = 'Truevision Targa image file';
imageExtensions['tif'] = 'Tagged Image File Format';
imageExtensions['tiff'] = 'Tagged Image File Format';
imageExtensions['tim'] = 'PSX TIM file';
imageExtensions['ttf'] = 'TrueType font file';
imageExtensions['vicar'] = 'VICAR rasterfile format';
imageExtensions['viff'] = 'Khoros Visualization image file';
imageExtensions['xbm'] = 'X Windows system bitmap (black and white)';
imageExtensions['xpm'] = 'X Windows system pixmap file (color)';
imageExtensions['xwd'] = 'X Windows system window dump file (color)';
// return HTML to display image with corresponding index
function returnImageHTML(imageIndex)
{
pageImageIndex = imageIndex;
var result =
'\n' +
'\n' ;
if (htmlOpts["stylesheet"])
{
result += '\n';
result += '\n\n';
}
else
{
result += '\n' +
'\n';
}
// only do work if image exists
if (imageNames[pageNumber][imageIndex] != null) {
result += '
';
// if image title defined, then use it, otherwise, image name
if( imageLabels[imageNames[pageNumber][imageIndex]] != null ) {
result += imageLabels[imageNames[pageNumber][imageIndex]];
} else {
result += imageNames[pageNumber][imageIndex];
}
result +=
'
\n';
// Look for image file extension
var image = imageNames[pageNumber][imageIndex];
var delim = image.lastIndexOf('.');
var extension = '';
if ( delim > 0 ) {
extension = image.substring(delim + 1);
extension = extension.toLowerCase();
}
if( extension == 'gif' ||
extension == 'jpg' ||
extension == 'jpe' ||
extension == 'jpeg' ||
extension == 'xbm' ||
extension == 'png' ) {
// Browser supports displaying image in-line
//PMF: the images of a given resolution are in a subdirectory with that name
if (resolution != "") {
// result += '
\n';
result += '
\n';
} else {
result += '\n';
}
}
else {
// Browser requires an external helper program
result +=
'
Your browser may not have the capability to view files of format "' + imageExtensions[extension]
+ '" as an in-line image. View image via a link instead.
\n';
}
// mod to get embedded mod files based on previews
var imageNoExtension = image.substr(0, image.length - (image.length - delim));
if (imageNoExtension.substr(imageNoExtension.length - 4, 4) == '.mov') {
// it's a Quicktime movie
result += '