var fileLoadingImage = "images/loading.gif", fileBottomNavCloseImage = "images/closelabel.gif", animate = true, resizeSpeed = 7, borderSize = 10, imageArray = [], activeImage; if (animate == true) { overlayDuration = 0.2; if (resizeSpeed > 10) { resizeSpeed = 10 } if (resizeSpeed < 1) { resizeSpeed = 1 } resizeDuration = (11 - resizeSpeed) * 0.15 } else { resizeDuration = overlayDuration = 0 } Object.extend(Element, { getWidth: function (a) { a = $(a); return a.offsetWidth }, setWidth: function (a, c) { a = $(a); a.style.width = c + "px" }, setHeight: function (a, c) { a = $(a); a.style.height = c + "px" }, setTop: function (a, c) { a = $(a); a.style.top = c + "px" }, setSrc: function (a, c) { a = $(a); a.src = c }, setHref: function (a, c) { a = $(a); a.href = c }, setInnerHTML: function (a, c) { a = $(a); a.innerHTML = c } }); Array.prototype.removeDuplicates = function () { for (i = 0; i < this.length; i++) { for (j = this.length - 1; j > i; j--) { this[i][0] == this[j][0] && this.splice(j, 1) } } }; Array.prototype.empty = function () { for (i = 0; i <= this.length; i++) { this.shift() } }; var Lightbox = Class.create(); Lightbox.prototype = { initialize: function () { if (document.getElementsByTagName) { for (var a = document.getElementsByTagName("a"), c = document.getElementsByTagName("area"), b = 0; b < a.length; b++) { var e = a[b], d = String(e.getAttribute("rel")); if (e.getAttribute("href") && d.toLowerCase().match("lightbox")) { e.onclick = function () { myLightbox.start(this); return false } } } for (b = 0; b < c.length; b++) { a = c[b]; d = String(a.getAttribute("rel")); if (a.getAttribute("href") && d.toLowerCase().match("lightbox")) { a.onclick = function () { myLightbox.start(this); return false } } } b = document.getElementsByTagName("body").item(0); c = document.createElement("div"); c.setAttribute("id", "overlay"); c.style.display = "none"; c.onclick = function () { myLightbox.end() }; b.appendChild(c); c = document.createElement("div"); c.setAttribute("id", "lightbox"); c.style.display = "none"; c.onclick = function (f) { if (!f) { f = window.event } Event.element(f).id == "lightbox" && myLightbox.end() }; b.appendChild(c); d = document.createElement("div"); d.setAttribute("id", "outerImageContainer"); c.appendChild(d); if (animate) { Element.setWidth("outerImageContainer", 250); Element.setHeight("outerImageContainer", 250) } else { Element.setWidth("outerImageContainer", 1); Element.setHeight("outerImageContainer", 1) } b = document.createElement("div"); b.setAttribute("id", "imageContainer"); d.appendChild(b); d = document.createElement("img"); d.setAttribute("id", "lightboxImage"); b.appendChild(d); d = document.createElement("div"); d.setAttribute("id", "hoverNav"); b.appendChild(d); a = document.createElement("a"); a.setAttribute("id", "prevLink"); a.setAttribute("href", "#"); d.appendChild(a); a = document.createElement("a"); a.setAttribute("id", "nextLink"); a.setAttribute("href", "#"); d.appendChild(a); d = document.createElement("div"); d.setAttribute("id", "loading"); b.appendChild(d); b = document.createElement("a"); b.setAttribute("id", "loadingLink"); b.setAttribute("href", "#"); b.onclick = function () { myLightbox.end(); return false }; d.appendChild(b); d = document.createElement("img"); d.setAttribute("src", fileLoadingImage); b.appendChild(d); b = document.createElement("div"); b.setAttribute("id", "imageDataContainer"); b.className = "clearfix"; c.appendChild(b); c = document.createElement("div"); c.setAttribute("id", "imageData"); b.appendChild(c); b = document.createElement("div"); b.setAttribute("id", "imageDetails"); c.appendChild(b); d = document.createElement("span"); d.setAttribute("id", "caption"); b.appendChild(d); d = document.createElement("span"); d.setAttribute("id", "numberDisplay"); b.appendChild(d); b = document.createElement("div"); b.setAttribute("id", "bottomNav"); c.appendChild(b); c = document.createElement("a"); c.setAttribute("id", "bottomNavClose"); c.setAttribute("href", "#"); c.onclick = function () { myLightbox.end(); return false }; b.appendChild(c); b = document.createElement("img"); b.setAttribute("src", fileBottomNavCloseImage); c.appendChild(b) } }, start: function (a) { function c(g) { var h = g.getAttribute("title"); g = h != null && h != "" ? g.getAttribute("rev") : null; return ddimageTitleFinal = g != null && g != "" ? '<a href="' + g + '" class="ddcaptionurl">' + h + "</a>" : h } hideSelectBoxes(); hideFlash(); var b = getPageSize(); Element.setHeight("overlay", b[1]); new Effect.Appear("overlay", { duration: overlayDuration, from: 0, to: 0.8 }); imageArray = []; imageNum = 0; if (document.getElementsByTagName) { var e = document.getElementsByTagName("a"); if (a.getAttribute("rel") == "lightbox") { imageArray.push([a.getAttribute("href"), c(a)]) } else { for (var d = 0; d < e.length; d++) { var f = e[d]; f.getAttribute("href") && f.getAttribute("rel") == a.getAttribute("rel") && imageArray.push([f.getAttribute("href"), c(f)]) } for (imageArray.removeDuplicates(); imageArray[imageNum][0] != a.getAttribute("href"); ) { imageNum++ } } a = getPageScroll()[1] + b[3] / 10; Element.setTop("lightbox", a); Element.show("lightbox"); this.changeImage(imageNum) } }, changeImage: function (a) { activeImage = a; animate && Element.show("loading"); Element.hide("lightboxImage"); Element.hide("hoverNav"); Element.hide("prevLink"); Element.hide("nextLink"); Element.hide("imageDataContainer"); Element.hide("numberDisplay"); imgPreloader = new Image; imgPreloader.onload = function () { Element.setSrc("lightboxImage", imageArray[activeImage][0]); myLightbox.resizeImageContainer(imgPreloader.width, imgPreloader.height) }; imgPreloader.src = imageArray[activeImage][0] }, resizeImageContainer: function (a, c) { this.widthCurrent = Element.getWidth("outerImageContainer"); this.heightCurrent = Element.getHeight("outerImageContainer"); var b = a + borderSize * 2, e = c + borderSize * 2; this.xScale = b / this.widthCurrent * 100; this.yScale = e / this.heightCurrent * 100; wDiff = this.widthCurrent - b; hDiff = this.heightCurrent - e; hDiff != 0 && new Effect.Scale("outerImageContainer", this.yScale, { scaleX: false, duration: resizeDuration, queue: "front" }); wDiff != 0 && new Effect.Scale("outerImageContainer", this.xScale, { scaleY: false, delay: resizeDuration, duration: resizeDuration }); if (hDiff == 0 && wDiff == 0) { navigator.appVersion.indexOf("MSIE") != -1 ? pause(250) : pause(100) } Element.setHeight("prevLink", c); Element.setHeight("nextLink", c); Element.setWidth("imageDataContainer", b); this.showImage() }, showImage: function () { Element.hide("loading"); new Effect.Appear("lightboxImage", { duration: resizeDuration, queue: "end", afterFinish: function () { myLightbox.updateDetails() } }); this.preloadNeighborImages() }, updateDetails: function () { Element.show("caption"); Element.setInnerHTML("caption", imageArray[activeImage][1]); 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, from: 0, to: 1 }), new Effect.Appear("imageDataContainer", { sync: true, duration: resizeDuration })], { duration: resizeDuration, afterFinish: function () { var a = getPageSize(); Element.setHeight("overlay", a[1]); myLightbox.updateNav() } }) }, updateNav: function () { Element.show("hoverNav"); if (activeImage != 0) { Element.show("prevLink"); document.getElementById("prevLink").onclick = function () { myLightbox.changeImage(activeImage - 1); return false } } if (activeImage != imageArray.length - 1) { Element.show("nextLink"); document.getElementById("nextLink").onclick = function () { myLightbox.changeImage(activeImage + 1); return false } } this.enableKeyboardNav() }, enableKeyboardNav: function () { document.onkeydown = this.keyboardAction }, disableKeyboardNav: function () { document.onkeydown = "" }, keyboardAction: function (a) { if (a == null) { keycode = event.keyCode; escapeKey = 27 } else { keycode = a.keyCode; escapeKey = a.DOM_VK_ESCAPE } key = String.fromCharCode(keycode).toLowerCase(); if (key == "x" || key == "o" || key == "c" || keycode == escapeKey) { myLightbox.end() } else { if (key == "p" || keycode == 37) { if (activeImage != 0) { myLightbox.disableKeyboardNav(); myLightbox.changeImage(activeImage - 1) } } else { if (key == "n" || keycode == 39) { if (activeImage != imageArray.length - 1) { myLightbox.disableKeyboardNav(); myLightbox.changeImage(activeImage + 1) } } } } }, 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: function () { this.disableKeyboardNav(); Element.hide("lightbox"); new Effect.Fade("overlay", { duration: overlayDuration }); showSelectBoxes(); showFlash() } }; function getPageScroll() { var a; if (self.pageYOffset) { a = self.pageYOffset } else { if (document.documentElement && document.documentElement.scrollTop) { a = document.documentElement.scrollTop } else { if (document.body) { a = document.body.scrollTop } } } return arrayPageScroll = ["", a] } function getPageSize() { var a, c; if (window.innerHeight && window.scrollMaxY) { a = document.body.scrollWidth; c = window.innerHeight + window.scrollMaxY } else { if (document.body.scrollHeight > document.body.offsetHeight) { a = document.body.scrollWidth; c = document.body.scrollHeight } else { a = document.body.offsetWidth; c = document.body.offsetHeight } } var b, e; if (self.innerHeight) { b = self.innerWidth; e = self.innerHeight } else { if (document.documentElement && document.documentElement.clientHeight) { b = document.documentElement.clientWidth; e = document.documentElement.clientHeight } else { if (document.body) { b = document.body.clientWidth; e = document.body.clientHeight } } } pageHeight = c < e ? e : c; pageWidth = a < b ? b : a; return arrayPageSize = [pageWidth, pageHeight, b, e] } function getKey(a) { keycode = a == null ? event.keyCode : a.which; key = String.fromCharCode(keycode).toLowerCase() } function listenKey() { document.onkeypress = getKey } function showSelectBoxes() { var a = document.getElementsByTagName("select"); for (i = 0; i != a.length; i++) { a[i].style.visibility = "visible" } } function hideSelectBoxes() { var a = document.getElementsByTagName("select"); for (i = 0; i != a.length; i++) { a[i].style.visibility = "hidden" } } function showFlash() { var a = document.getElementsByTagName("object"); for (i = 0; i != a.length; i++) { a[i].style.visibility = "visible" } a = document.getElementsByTagName("embeds"); for (i = 0; i != a.length; i++) { a[i].style.visibility = "visible" } } function hideFlash() { var a = document.getElementsByTagName("object"); for (i = 0; i != a.length; i++) { a[i].style.visibility = "hidden" } a = document.getElementsByTagName("embeds"); for (i = 0; i != a.length; i++) { a[i].style.visibility = "hidden" } } function pause(a) { var c = new Date; do { var b = new Date } while (b - c < a) } function initLightbox() { myLightbox = new Lightbox } Event.observe(window, "load", initLightbox, false);
