This commit was manufactured as part of Drupal's Great Git Migration to

create tag 'DRUPAL-5--1-0-1'.

Sprout from unlabeled-1.1.8 2007-05-01 18:46:46 UTC Stella Power <stella@66894.no-reply.drupal.org> 'drupal 5 version'
Cherrypick from unlabeled-1.1.6 2007-05-01 18:46:47 UTC Stella Power <stella@66894.no-reply.drupal.org> 'drupal 5 version':
    images/close_lite.gif
    images/loading_lite.gif
    images/overlay.png
    js/lightbox_lite.js
Cherrypick from unlabeled-1.2.2 2007-05-01 18:46:45 UTC Stella Power <stella@66894.no-reply.drupal.org> 'drupal 5 version':
    js/image_nodes_nogroup.js
    lightbox_lite.css
Cherrypick from unlabeled-1.1.2 2007-05-01 18:46:43 UTC Stella Power <stella@66894.no-reply.drupal.org> 'drupal 5 version':
    lightbox2.install
Cherrypick from unlabeled-1.1.4 2007-05-01 18:46:42 UTC Stella Power <stella@66894.no-reply.drupal.org> 'drupal 5 version':
    lightbox2.info
Cherrypick from unlabeled-1.10.2 2007-05-01 18:46:41 UTC Stella Power <stella@66894.no-reply.drupal.org> 'drupal 5 version':
    lightbox.css
Cherrypick from unlabeled-1.12.2 2007-05-01 18:46:40 UTC Stella Power <stella@66894.no-reply.drupal.org> 'drupal 5 version':
    README.txt
Cherrypick from unlabeled-1.18.2 2007-05-01 18:46:44 UTC Stella Power <stella@66894.no-reply.drupal.org> 'drupal 5 version':
    lightbox2.module
Cherrypick from unlabeled-1.4.2 2007-05-01 18:46:48 UTC Stella Power <stella@66894.no-reply.drupal.org> 'drupal 5 version':
    js/image_nodes.js
Cherrypick from unlabeled-1.6.2 2007-05-01 18:46:49 UTC Stella Power <stella@66894.no-reply.drupal.org> 'drupal 5 version':
    js/lightbox.js
parent 12af9211
LIGHTBOX V2 MODULE
------------------
Drupal Lightbox V2 Module:
By: Mark Ashmead
Mailto: bugzie@gmail.com
Co-maintainer: Stella Power (http://drupal.org/user/66894)
Licensed under the GNU/GPL License
Permission has been granted by Lokesh Dhakar to distribute the lightbox.js file via Drupal.org under this license scheme, as allowed by the Creative Commons License.
This module enables the use of lightbox V2 which places images above your current page, not within. This frees you from the constraints of the layout, particularly column widths.
---------------------------------------------------------------------------------------------------------
Pre-Installation
----------------
Due to variation in licensing, you will need to download the Scriptaculous/Prototype libraries seperately. Please visit: http://script.aculo.us/downloads - and download the latest version of the libraries. You will then need to copy the files located in \lib and \src directories of this download into the \lightbox2\js\ directory of the LightboxV2 module.
The files required are:
\lib\prototype.js
\src\builder.js
\src\dragdrop.js
\src\effects.js
\src\scriptaculous.js
\src\slider.js
\src\unittest.js
When copied, the directory should look like:
\lightbox2\js\prototype.js
\lightbox2\js\builder.js
\lightbox2\js\dragdrop.js
\lightbox2\js\effects.js
\lightbox2\js\scriptaculous.js
\lightbox2\js\slider.js
\lightbox2\js\unittest.js
Installation
------------
1. Copy lightbox2 folder to modules directory
2. At admin/modules enable the module
3. Add rel="lightbox" attribute to any link tag to activate the lightbox. For example:
<a href="images/image-1.jpg" rel="lightbox" title="my caption">image #1</a>
Optional: Use the title attribute if you want to show a caption.
4. If you have a set of related images that you would like to group, follow step one but additionally include a group name between square brackets in the rel attribute. For example:
<a href="images/image-1.jpg" rel="lightbox[roadtrip]">image #1</a>
<a href="images/image-2.jpg" rel="lightbox[roadtrip]">image #2</a>
<a href="images/image-3.jpg" rel="lightbox[roadtrip]">image #3</a>
No limits to the number of image sets per page or how many images are allowed in each set. Go nuts!
5. If you wish to turn the caption into a link, format your caption in the following way:
<a href="images/image-1.jpg" rel="lightbox" title='<a href="http://www.yourlink.com">Clicky Visit Link</a>'>image #1</a>
Information
------------
This module will include the lightbox CSS and JS files in your Drupal Installation without the need to edit the theme. The module comes with a Lightbox2 Lite option which does not use the Scriptaculous/Prototype libraries; it is therefore less likely to conflict with anything else.
Known Issues:
-------------
Image Issues - An issue has been identified with the loading of certain images when using the module. (close.gif, prev.gif, next.gif)
If your installation of Drupal exists in the root of your domain, i.e., www.yourinstallation.com then you shouldn't have any problems. The issue only occurs when Drupal is installed in a subdirectory, i.e., www.yourinstallation.com/subdirectory.
If this is the case, you will need to edit the lightbox.js on lines 63, 64 and 65 to reflect the fully qualified URL of your images. In the above case, this would be as follows;
var fileLoadingImage = "/modules/lightbox2/images/loading.gif";
var fileBottomNavCloseImage = "/modules/lightbox2/images/closelabel.gif";
var fileBottomNavZoomImage = "/modules/lightbox2/images/expand.gif"; //Update to 2.02+
should be changed to
var fileLoadingImage = "/subdirectory/modules/lightbox2/images/loading.gif";
var fileBottomNavCloseImage = "/subdirectory/modules/lightbox2/images/closelabel.gif";
var fileBottomNavZoomImage = "/subdirectory/modules/lightbox2/images/expand.gif"; //Update to 2.02+
There may be other methods that can be used to acheive this, but this should be the simplest for those with little or no programming experience. If you choose to use Lightbox2 Lite option, then you will no to edit the lightbox_lite.js file in a similar manner.
// Image Node Auto-Format with Auto Image Grouping
// Steve McKenzie
function lightbox2_image_nodes() {
var nodes = document.getElementsByClassName("image");
for (var i = 0; i < nodes.length; i++) {
if (Element.hasClassName(nodes[i], "image-thumbnail")) {
var parent = nodes[i].parentNode;
parent.rel = "lightbox[node_thumbnails]";
parent.title = nodes[i].alt.concat("<br /><br /><a href=\"" + parent.href + "\">View Image Information</a>");
parent.href = nodes[i].src.replace(".thumbnail", "");
//parent.title = nodes[i].alt;
}
}
}
try {
if (isJsEnabled()) {
addLoadEvent(lightbox2_image_nodes);
}
} catch (e) {
if (Drupal.jsEnabled) {
$(document).ready(lightbox2_image_nodes);
}
}
// Image Node Auto-Format
// Steve McKenzie
function lightbox2_image_nodes() {
var nodes = document.getElementsByClassName("image");
for (var i = 0; i < nodes.length; i++) {
if (Element.hasClassName(nodes[i], "image-thumbnail")) {
var parent = nodes[i].parentNode;
parent.rel = "lightbox";
parent.title = nodes[i].alt.concat("<br /><br /><a href=\"" + parent.href + "\">View Image Information</a>");
parent.href = nodes[i].src.replace(".thumbnail", "");
//parent.title = nodes[i].alt;
}
}
}
try {
if (isJsEnabled()) {
addLoadEvent(lightbox2_image_nodes);
}
} catch (e) {
if (Drupal.jsEnabled) {
$(document).ready(lightbox2_image_nodes);
}
}
// -----------------------------------------------------------------------------------
//
// Lightbox v2.02
// by Lokesh Dhakar - http://www.huddletogether.com
// 3/31/06
//
// For more information on this script, visit:
// http://huddletogether.com/projects/lightbox2/
//
// Additional elements added by Mark Ashmead.
//
// Permission has been granted to Mark Ashmead to distribute this file via Drupal.org
// Under GPL license.
// Mailto: bugzie@gmail.com
//
// Credit also due to those who have helped, inspired, and made their code available to the public.
// Including: Scott Upton(uptonic.com), Peter-Paul Koch(quirksmode.org), Thomas Fuchs(mir.aculo.us), and others.
//
//
// -----------------------------------------------------------------------------------
/*
Table of Contents
-----------------
Configuration
Global Variables
Extending Built-in Objects
- Object.extend(Element)
- Array.prototype.removeDuplicates()
- Array.prototype.empty()
Lightbox Class Declaration
- initialize()
- start()
- changeImage()
- resizeImageContainer()
- showImage()
- updateDetails()
- updateNav()
- enableKeyboardNav()
- disableKeyboardNav()
- keyboardAction()
- preloadNeighborImages()
- end()
Miscellaneous Functions
- getPageScroll()
- getPageSize()
- getKey()
- listenKey()
- showSelectBoxes()
- hideSelectBoxes()
- pause()
- initLightbox()
Function Calls
- addLoadEvent(initLightbox)
*/
// -----------------------------------------------------------------------------------
//
// Configuration
//
//var fileLoadingImage = "/sites/all/modules/lightbox2/images/loading.gif";
//var fileBottomNavCloseImage = "/sites/all/modules/lightbox2/images/closelabel.gif";
//var fileBottomNavZoomImage = "/sites/all/modules/lightbox2/images/expand.gif"; //Update to 2.02+
var resizeSpeed = 7; // controls the speed of the image resizing (1=slowest and 10=fastest)
var borderSize = 10; //if you adjust the padding in the CSS, you will need to update this variable
// -----------------------------------------------------------------------------------
//
// Global Variables
//
var imageArray = new Array;
var activeImage;
if(resizeSpeed > 10){ resizeSpeed = 10;}
if(resizeSpeed < 1){ resizeSpeed = 1;}
resizeDuration = (11 - resizeSpeed) * 0.15;
// -----------------------------------------------------------------------------------
//
// Additional methods for Element added by SU, Couloir
// - further additions by Lokesh Dhakar (huddletogether.com)
//
Object.extend(Element, {
getWidth: function(element) {
element = $ID(element);
return element.offsetWidth;
},
setWidth: function(element,w) {
element = $ID(element);
element.style.width = w +"px";
},
setHeight: function(element,h) {
element = $ID(element);
element.style.height = h +"px";
},
setTop: function(element,t) {
element = $ID(element);
element.style.top = t +"px";
},
setSrc: function(element,src) {
element = $ID(element);
element.src = src;
},
setHref: function(element,href) {
element = $ID(element);
element.href = href;
},
setInnerHTML: function(element,content) {
element = $ID(element);
element.innerHTML = content;
}
});
// -----------------------------------------------------------------------------------
//
// Extending built-in Array object
// - array.removeDuplicates()
// - array.empty()
//
Array.prototype.removeDuplicates = function () {
for(i = 1; i < this.length; i++){
if(this[i][0] == this[i-1][0]){
this.splice(i,1);
}
}
}
// -----------------------------------------------------------------------------------
Array.prototype.empty = function () {
for(i = 0; i <= this.length; i++){
this.shift();
}
}
// -----------------------------------------------------------------------------------
//
// Lightbox Class Declaration
// - initialize()
// - start()
// - changeImage()
// - resizeImageContainer()
// - showImage()
// - updateDetails()
// - updateNav()
// - enableKeyboardNav()
// - disableKeyboardNav()
// - keyboardNavAction()
// - preloadNeighborImages()
// - end()
//
// Structuring of code inspired by Scott Upton (http://www.uptonic.com/)
//
var Lightbox = Class.create();
Lightbox.prototype = {
// initialize()
// Constructor runs on completion of the DOM loading. Loops through anchor tags looking for
// 'lightbox' references and applies onclick events to appropriate links. The 2nd section of
// the function inserts html at the bottom of the page which is used to display the shadow
// overlay and the image container.
//
initialize: function() {
if (!document.getElementsByTagName){ return; }
var anchors = document.getElementsByTagName('a');
// loop through all anchor tags
for (var i=0; i<anchors.length; i++){
var anchor = anchors[i];
var relAttribute = String(anchor.getAttribute('rel'));
// use the string.match() method to catch 'lightbox' references in the rel attribute
if (anchor.getAttribute('href') && (relAttribute.toLowerCase().match('lightbox'))){
anchor.onclick = function () {myLightbox.start(this); return false;}
}
}
// The rest of this code inserts html at the bottom of the page that looks similar to this:
//
// <div id="overlay"></div>
// <div id="lightbox">
// <div id="outerImageContainer">
// <div id="imageContainer">
// <img id="lightboxImage">
// <div style="" id="hoverNav">
// <a href="#" id="prevLink"></a>
// <a href="#" id="nextLink"></a>
// </div>
// <div id="loading">
// <a href="#" id="loadingLink">
// <img src="images/loading.gif">
// </a>
// </div>
// </div>
// </div>
// <div id="imageDataContainer">
// <div id="imageData">
// <div id="imageDetails">
// <span id="caption"></span>
// <span id="numberDisplay"></span>
// </div>
// <div id="bottomNav">
// <a href="#" id="bottomNavClose">
// <img src="images/close.gif">
// </a>
// </div>
// </div>
// </div>
// </div>
var objBody = document.getElementsByTagName("body").item(0);
var objOverlay = document.createElement("div");
objOverlay.setAttribute('id','overlay');
objOverlay.style.display = 'none';
objOverlay.onclick = function() { myLightbox.end(); return false; }
objBody.appendChild(objOverlay);
var objLightbox = document.createElement("div");
objLightbox.setAttribute('id','lightbox');
objLightbox.style.display = 'none';
objBody.appendChild(objLightbox);
var objOuterImageContainer = document.createElement("div");
objOuterImageContainer.setAttribute('id','outerImageContainer');
objLightbox.appendChild(objOuterImageContainer);
var objImageContainer = document.createElement("div");
objImageContainer.setAttribute('id','imageContainer');
objOuterImageContainer.appendChild(objImageContainer);
var objLightboxImage = document.createElement("img");
objLightboxImage.setAttribute('id','lightboxImage');
objImageContainer.appendChild(objLightboxImage);
var objHoverNav = document.createElement("div");
objHoverNav.setAttribute('id','hoverNav');
objImageContainer.appendChild(objHoverNav);
var objPrevLink = document.createElement("a");
objPrevLink.setAttribute('id','prevLink');
objPrevLink.setAttribute('href','#');
objPrevLink.setAttribute('onFocus','if(this.blur)this.blur()'); //Update to 2.02+
objHoverNav.appendChild(objPrevLink);
var objNextLink = document.createElement("a");
objNextLink.setAttribute('id','nextLink');
objNextLink.setAttribute('href','#');
objNextLink.setAttribute('onFocus','if(this.blur)this.blur()'); //Update to 2.02+
objHoverNav.appendChild(objNextLink);
var objLoading = document.createElement("div");
objLoading.setAttribute('id','loading');
objImageContainer.appendChild(objLoading);
var objLoadingLink = document.createElement("a");
objLoadingLink.setAttribute('id','loadingLink');
objLoadingLink.setAttribute('href','#');
objLoadingLink.onclick = function() { myLightbox.end(); return false; }
objLoading.appendChild(objLoadingLink);
//var objLoadingImage = document.createElement("img");
// objLoadingImage.setAttribute('src', fileLoadingImage);
// objLoadingLink.appendChild(objLoadingImage);
var objImageDataContainer = document.createElement("div");
objImageDataContainer.setAttribute('id','imageDataContainer');
objImageDataContainer.className = 'clearfix';
objLightbox.appendChild(objImageDataContainer);
var objImageData = document.createElement("div");
objImageData.setAttribute('id','imageData');
objImageDataContainer.appendChild(objImageData);
var objImageDetails = document.createElement("div");
objImageDetails.setAttribute('id','imageDetails');
objImageData.appendChild(objImageDetails);
var objCaption = document.createElement("span");
objCaption.setAttribute('id','caption');
objImageDetails.appendChild(objCaption);
var objNumberDisplay = document.createElement("span");
objNumberDisplay.setAttribute('id','numberDisplay');
objImageDetails.appendChild(objNumberDisplay);
var objBottomNav = document.createElement("div");
objBottomNav.setAttribute('id','bottomNav');
objImageData.appendChild(objBottomNav);
//Start Close button Placement
var objBottomNavCloseLink = document.createElement("a");
objBottomNavCloseLink.setAttribute('id','bottomNavClose');
objBottomNavCloseLink.setAttribute('href','#');
objBottomNavCloseLink.onclick = function() { myLightbox.end(); return false; }
objBottomNav.appendChild(objBottomNavCloseLink);
//var objBottomNavCloseImage = document.createElement("img");
//objBottomNavCloseImage.setAttribute('src', fileBottomNavCloseImage);
//objBottomNavCloseLink.setAttribute('onFocus','if(this.blur)this.blur()'); //Update to 2.02+
//objBottomNavCloseLink.appendChild(objBottomNavCloseImage);
//End Close button Placement
//Start - Update to 2.02+
var objBottomNavZoomLink = document.createElement("a");
objBottomNavZoomLink.setAttribute('id','bottomNavZoom');
objBottomNavZoomLink.setAttribute('href','#');
objBottomNavZoomLink.setAttribute('onFocus','if(this.blur)this.blur()'); //Update to 2.02+
objBottomNavZoomLink.onclick = function() { myLightbox.changeImage(activeImage,'TRUE'); return false; }
objBottomNav.appendChild(objBottomNavZoomLink);
//var objBottomNavZoomImage = document.createElement("img");
//objBottomNavZoomImage.setAttribute('src', fileBottomNavZoomImage);
//objBottomNavZoomLink.appendChild(objBottomNavZoomImage);
//End - Update to 2.02+
},
//
// start()
// Display overlay and lightbox. If image is part of a set, add siblings to imageArray.
//
start: function(imageLink) {
hideSelectBoxes();
// stretch overlay to fill page and fade in
var arrayPageSize = getPageSize();
Element.setHeight('overlay', arrayPageSize[1]);
new Effect.Appear('overlay', { duration: 0.2, from: 0.0, to: 0.8 });
imageArray = [];
imageNum = 0;
if (!document.getElementsByTagName){ return; }
var anchors = document.getElementsByTagName('a');
// if image is NOT part of a set..
if((imageLink.getAttribute('rel') == 'lightbox')){
// add single image to imageArray
imageArray.push(new Array(imageLink.getAttribute('href'), imageLink.getAttribute('title')));
} else {
// if image is part of a set..
// loop through anchors, find other images in set, and add them to imageArray
for (var i=0; i<anchors.length; i++){
var anchor = anchors[i];
if (anchor.getAttribute('href') && (anchor.getAttribute('rel') == imageLink.getAttribute('rel'))){
imageArray.push(new Array(anchor.getAttribute('href'), anchor.getAttribute('title')));
}
}
imageArray.removeDuplicates();
while(imageArray[imageNum][0] != imageLink.getAttribute('href')) { imageNum++;}
}
// calculate top offset for the lightbox and display
var arrayPageSize = getPageSize();
var arrayPageScroll = getPageScroll();
//var lightboxTop = arrayPageScroll[1] + (arrayPageSize[3] / 15); //REMed: Update to 2.02+
var lightboxTop = arrayPageScroll[1] + 4 //Update to 2.02+
Element.setTop('lightbox', lightboxTop);
Element.show('lightbox');
this.changeImage(imageNum);
},
//
// changeImage()
// Hide most elements and preload image in preparation for resizing image container.
//
changeImage: function(imageNum, zoom) {
activeImage = imageNum; // update global var
// hide elements during transition
Element.show('loading');
Element.hide('lightboxImage');
Element.hide('hoverNav');
Element.hide('prevLink');
Element.hide('nextLink');
Element.hide('imageDataContainer');
Element.hide('numberDisplay');
imgPreloader = new Image();
// once image is preloaded, resize image container
if (zoom=="TRUE"){
imgPreloader.onload=function(){
Element.setSrc('lightboxImage', imageArray[activeImage][0]);
photo.style.width = (imgPreloader.width)+ 'px';
myLightbox.resizeImageContainer(imgPreloader.width, imgPreloader.height);
}
Element.hide('bottomNavZoom')
}else{
imgPreloader.onload=function(){
Element.setSrc('lightboxImage', imageArray[activeImage][0]);
//resize code
var arrayPageSize = getPageSize();
var targ = { w:arrayPageSize[2] - (borderSize * 2), h:arrayPageSize[3] - (borderSize * 6) };
var orig = { w:imgPreloader.width, h:imgPreloader.height };
//// shrink image with the same aspect
var ratio = 1.0;
Element.hide('bottomNavZoom');
if ((orig.w >= targ.w || orig.h >= targ.h) && orig.h && orig.w){
ratio = ((targ.w / orig.w) < (targ.h / orig.h)) ? targ.w / orig.w : targ.h / orig.h;
Element.show('bottomNavZoom');
}
var new_width = Math.floor(orig.w * ratio);
var new_height = Math.floor(orig.h * ratio);
photo = document.getElementById('lightboxImage');
photo.style.width = (new_width)+ 'px';
myLightbox.resizeImageContainer(new_width, new_height);
}
}
imgPreloader.src = imageArray[activeImage][0];
},
//
// resizeImageContainer()
//
resizeImageContainer: function( imgWidth, imgHeight) {
// get current height and width
this.wCur = Element.getWidth('outerImageContainer');
this.hCur = Element.getHeight('outerImageContainer');
// scalars based on change from old to new
this.xScale = ((imgWidth + (borderSize * 2)) / this.wCur) * 100;
this.yScale = ((imgHeight + (borderSize * 2)) / this.hCur) * 100;
// calculate size difference between new and old image, and resize if necessary
wDiff = (this.wCur - borderSize * 2) - imgWidth;
hDiff = (this.hCur - borderSize * 2) - imgHeight;
if(!( hDiff == 0)){ new Effect.Scale('outerImageContainer', this.yScale, {scaleX: false, duration: resizeDuration, queue: 'front'}); }
if(!( wDiff == 0)){ new Effect.Scale('outerImageContainer', this.xScale, {scaleY: false, delay: resizeDuration, duration: resizeDuration}); }
// if new and old image are same size and no scaling transition is necessary,
// do a quick pause to prevent image flicker.
if((hDiff == 0) && (wDiff == 0)){
if (navigator.appVersion.indexOf("MSIE")!=-1){ pause(250); } else { pause(100);}
}
Element.setHeight('prevLink', imgHeight);
Element.setHeight('nextLink', imgHeight);
Element.setWidth( 'imageDataContainer', imgWidth + (borderSize * 2));
this.showImage();
},
//
// showImage()
// Display image and begin preloading neighbors.
//
showImage: function(){
Element.hide('loading');
new Effect.Appear('lightboxImage', { duration: 0.5, queue: 'end', afterFinish: function(){ myLightbox.updateDetails(); } });
this.preloadNeighborImages();
},
//
// updateDetails()
// Display caption, image number, and bottom nav.
//
updateDetails: function() {
Element.show('caption');
Element.setInnerHTML( 'caption', imageArray[activeImage][1]);
// if image is part of set display 'Image x of x'
if(imageArray.length > 1){
Element.show('numberDisplay');
Element.setInnerHTML( 'numberDisplay', "Image " + eval(activeImage + 1) + " of " + imageArray.length);
}
new Effect.Parallel(
[ new Effect.SlideDown( 'imageDataContainer', { sync: true, duration: resizeDuration + 0.25, from: 0.0, to: 1.0 }),
new Effect.Appear('imageDataContainer', { sync: true, duration: 1.0 }) ],
{ duration: 0.65, afterFinish: function() { myLightbox.updateNav();} }
);
},
//
// updateNav()
// Display appropriate previous and next hover navigation.
//
updateNav: function() {
Element.show('hoverNav');
// if not first image in set, display prev image button
if(activeImage != 0){
Element.show('prevLink');
document.getElementById('prevLink').onclick = function() {
myLightbox.changeImage(activeImage - 1); return false;
}
}
// if not last image in set, display next image button
if(activeImage != (imageArray.length - 1)){
Element.show('nextLink');
document.getElementById('nextLink').onclick = function() {
myLightbox.changeImage(activeImage + 1); return false;
}
}
this.enableKeyboardNav();
},
//
// enableKeyboardNav()
//
enableKeyboardNav: function() {
document.onkeydown = this.keyboardAction;
},
//
// disableKeyboardNav()
//
disableKeyboardNav: function() {
document.onkeydown = '';
},
//
// keyboardAction()
//
// Update to 2.02+
keyboardAction: function(e) {
if (e == null) { // ie
keycode = event.keyCode;
} else { // mozilla
keycode = e.which;
}
// Instead of the above code, (starting with 'if ...') Roel replaced it with the code below,
// but I see no use for it. Perhaps it has something to do with browsercompatibility, so I
// left it here, so you can try whether it works better in case you run in to any problems.
//keyboardAction: function(e) {
//var keyCode =
//document.layers ? e.which :
//document.all ? event.keyCode :
//document.getElementById ? e.keyCode : 0;
key = String.fromCharCode(keycode).toLowerCase();
if((key == 'x') || (key == 'o') || (key == 'c')){ // close lightbox
myLightbox.end();
} else if(key == 'p' || keycode == 37 || keycode == 8 || keycode == 100){ // display previous image
if(activeImage != 0){
myLightbox.disableKeyboardNav();
myLightbox.changeImage(activeImage - 1);
}
} else if(key == 'n' || keycode == 39 || keycode == 32 || keycode == 102){ // display next image
if(activeImage != (imageArray.length - 1)){
myLightbox.disableKeyboardNav();
myLightbox.changeImage(activeImage + 1);
}
}
},
//
// preloadNeighborImages()
// Preload previous and next images.
//
preloadNeighborImages: function(){
if((imageArray.length - 1) > activeImage){
preloadNextImage = new Image();
preloadNextImage.src = imageArray[activeImage + 1][0];
}
if(activeImage > 0){
preloadPrevImage = new Image();
preloadPrevImage.src = imageArray[activeImage - 1][0];
}
},
//
// end()
//