var thumbs; // reference to thumbs div
var slider; // reference to slider div
var slide; // reference to slice img
var centering; // reference to centering div
var isScrolling = 0; // are we scrolling the thumbnails
var scrollOffset = 0; // number of pixels to move the thumbnail each time the timer fires
var minScrollOffset; // minimum allowed value for scrollOffset
var maxScrollOffset; // maximum allowed value for scrollOffset
var scrollDelay = 25; // interval between sliding thumbnails (milliseconds)
var slideSpeed = 3000; // specify interval between each slide in the slideshow(milliseconds)
var isPlaying = 0; // are we playing the slideshow
var currentImageIndex = 0; // currently displayed image
var blendDuration = 500; // duration of the blender filter in milliseconds
var debug = true; // set to true to show debugging information
var lastTimeoutID = 0; // return value from last call to setTimeout, used to reset timeout
var preloadImage; // holder for the next preloaded image
var preloadIndex = 0; // index to the currently loading image
var preloadDelay = 100; // polling interval for preloading images (milliseonds)
function Window_Onload()
{
thumbs = GetObj("thumbs");
slider = GetObj("slider");
slide = GetObj("slide");
centering = GetObj("centering")
thumbs.onmousemove = MouseMove;
thumbs.onmouseleave = StopScrolling;
maxScrollOffset = 0;
minScrollOffset = thumbs.offsetWidth-slider.offsetWidth;
if (minScrollOffset > maxScrollOffset)
minScrollOffset = maxScrollOffset;
ShowImage(currentImageIndex)
SlideIt()
PreloadImages()
if (debug) DebugInit();
if (debug) Debug("debugThumbs", "offsetWidth=" + thumbs.offsetWidth + ", style.width=" + thumbs.style.width);
}
window.onload = Window_Onload;
function MouseMove(e)
{
if (!e)
e = window.event;
var obj = (e.srcElement ? e.srcElement : e.target); // IE: srcElement, Firefox: e.target
// Retrieve x position within the (thumbs) layer
var x = (e.layerX ? e.layerX : e.x) // IE: e.x, Firefox: e.layerX
x = x + slider.offsetLeft
s = "x=" + (e.x ? e.x : "") + ", ";
s += "clientX=" + (e.clientX ? e.clientX : "") + ", ";
s += "offsetX=" + (e.offsetX ? e.offsetX : "") + ", ";
s += "layerX=" + (e.layerX ? e.layerX : "") + ", ";
if (debug) Debug("debugMouse", "actual=" + x + " (" + obj.tagName + ", " + obj.id + ", " + s + ")");
// Convert to scale -5 to +5
x = x / thumbs.offsetWidth
x = x * 2;
x = x - 1;
x = x * 10;
scrollOffset = Math.pow(Math.abs(0.25*x), 3)
scrollOffset = scrollOffset
if (x>0)
scrollOffset = scrollOffset * -1
StartScrolling()
if (debug) Debug("debugScaledX", x);
if (debug) Debug("debugScrollOffset", scrollOffset);
}
function Scroll()
{
var newX
if (isScrolling)
{
newX = slider.offsetLeft + scrollOffset;
if (debug) Debug("debugSlider", "offsetLeft=" + slider.offsetLeft + ", style.left=" + slider.style.left + ", newX=" + newX + ", min=" + minScrollOffset + ", max=" + maxScrollOffset);
if (newX < minScrollOffset)
{
newX = minScrollOffset;
slider.style.left = newX + "px";
}
else if (newX > maxScrollOffset)
{
newX = maxScrollOffset;
slider.style.left = newX + "px";
}
else
{
slider.style.left = newX + "px";
}
setTimeout("Scroll()",scrollDelay);
}
}
function StartScrolling()
{
if (!isScrolling)
{
isScrolling = 1
Scroll()
}
}
function StopScrolling()
{
isScrolling = 0
}
function ShowImage(imageIndex)
{
if (slide)
{
if (slide.filters != null)
slide.filters[0].apply()
slide.src = slideImages[imageIndex];
if (thumbs.style.width == "960px")
{
var newWidth = 960;
}
else
{
var newWidth = 800;
}
if (newWidth > 0) centering.style.width = newWidth + "px"
SetInnerHTML("title", slideTitle[imageIndex] + links[imageIndex]);
SetInnerHTML("slideCount", "Image " + (imageIndex+1) + " of " + slideImages.length);
SetInnerHTML("DylanCopyright", "
Copyright © 2010 Dylan Swan");
if (slide.filters != null)
slide.filters[0].play()
currentImageIndex=imageIndex
// Reset timeout in case user pressed Next/Prev during slideshow
clearTimeout(lastTimeoutID);
lastTimeoutID = setTimeout("SlideIt()",slideSpeed+blendDuration);
}
if (debug) Debug("debugImage", slideImages[imageIndex] + ", width=" + slideWidth[imageIndex] + "px, image " + (imageIndex+1) + " of " + slideImages.length)
if (debug) Debug("debugExif", slideExif[imageIndex])
}
function SlideIt()
{
if (isPlaying)
Next()
}
function Next()
{
currentImageIndex=(currentImageIndex0)? currentImageIndex-1 : slideImages.length-1
ShowImage(currentImageIndex)
}
function PlayPause(sender)
{
if (isPlaying==0)
{
Next()
}
isPlaying = !isPlaying
SetInnerHTML("playpause", isPlaying ? "pause" : "play")
}
function Download()
{
window.open(slideLinks[currentImageIndex])
}
function PreloadImages()
{
if (preloadImage == null)
{
preloadImage = new Image();
preloadImage.src = slideImages[preloadIndex];
}
else
{
if (preloadImage.width != 0)
{
preloadImage = null;
preloadIndex++;
}
}
if (preloadIndex < slideImages.length)
setTimeout("PreloadImages()", preloadDelay);
if (debug) Debug("debugPreload", "Preloading " + slideImages[preloadIndex] + ", current width=" + (preloadImage==null ? "null" : preloadImage.width));
}
function DebugInit()
{
SetInnerHTML("debug",
"Image:
" +
"Exif:
" +
"Mouse:
" +
"Thumbs DIV:
" +
"Scaled X:
" +
"ScrollOffset:
" +
"Slider:
" +
"Preload:
");
}
function Debug(element, text)
{
SetInnerHTML(element, text);
}