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); }