// ---
/*
JaS is developed by Robert Nyman, http://www.robertnyman.com
For more information, please see http://www.robertnyman.com/jas
*/
var JaS = {
// Customization parameters
imagePath : "pictures/",
images : [
["1.jpg", "
Picture One
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. In placerat mi in turpis. Donec in urna tristique metus lobortis posuere. In hac habitasse platea dictumst. Ut ac enim vitae ligula malesuada laoreet. Nunc malesuada tristique odio. Proin ornare aliquet nulla."],
["2.jpg", "Picture One
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. In placerat mi in turpis. Donec in urna tristique metus lobortis posuere. In hac habitasse platea dictumst. Ut ac enim vitae ligula malesuada laoreet. Nunc malesuada tristique odio. Proin ornare aliquet nulla."],
["3.jpg", "Picture One
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. In placerat mi in turpis. Donec in urna tristique metus lobortis posuere. In hac habitasse platea dictumst. Ut ac enim vitae ligula malesuada laoreet. Nunc malesuada tristique odio. Proin ornare aliquet nulla."],
["4.jpg", "Picture One
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. In placerat mi in turpis. Donec in urna tristique metus lobortis posuere. In hac habitasse platea dictumst. Ut ac enim vitae ligula malesuada laoreet. Nunc malesuada tristique odio. Proin ornare aliquet nulla."],
["5.jpg", "Picture One
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. In placerat mi in turpis. Donec in urna tristique metus lobortis posuere. In hac habitasse platea dictumst. Ut ac enim vitae ligula malesuada laoreet. Nunc malesuada tristique odio. Proin ornare aliquet nulla."],
["6.jpg", "Picture One
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. In placerat mi in turpis. Donec in urna tristique metus lobortis posuere. In hac habitasse platea dictumst. Ut ac enim vitae ligula malesuada laoreet. Nunc malesuada tristique odio. Proin ornare aliquet nulla."]
],
fadeContainerId : "jas-container",
imageContainerId : "jas-image",
imageTextContainerId : "jas-image-text",
previousLinkId : "previous-image",
nextLinkId : "next-image",
imageCounterId : "image-counter",
startSlideShowId : "start-slideshow",
stopSlideShowId : "stop-slideshow",
dimBackgroundOverlayId : "jas-dim-overlay",
dimBackgroundId : "dim-background",
noDimBackgroundId : "no-dim-background",
thumbnailContainerId: "jas-thumbnails",
tagsContainerId: "jas-tags",
tagsSelectAllId: "jas-select-all-tags",
useImageText : true,
useThumbnails : true,
allowDimmedBackground : true,
automaticallyDimBackgroundWhenSlideShow : true,
useTags : true,
useKeyboardShortcuts : true,
useFadingIn : true,
useFadingOut : true,
useFadeWhenNotSlideshow : false,
useFadeForSlideshow : true,
useFadeAtInitialLoad : false,
fadeIncrement : 0.1,
fadeInterval : 100, // Milliseconds
timeForSlideInSlideshow : 1500, // Milliseconds
// JaS function parameters
allImages : null,
currentImages : null,
fadeContainer : null,
imageContainer : null,
imageTextContainer : null,
previousLink : null,
nextLink : null,
dimBackgroundOverlay : null,
dimBackgroundLink : null,
noDimBackgroundLink : null,
dimmingActivated : false,
imageCounter : null,
startSlideShowLink : null,
stopSlideShowLink : null,
thumbnailContainer : null,
thumbnailCollection : [],
currentThumbnailSelected : null,
tagsContainer : null,
tagsSelectAll : null,
tagsList : null,
tags : [],
tagsCheckboxes : [],
selectAllTags : true,
imageText : null,
imageText : "",
imageSource : "",
imageIndex : 0,
fadingIn : true,
fadeLevel : 0,
fadeEndLevel : 1,
fadeTimer : null,
hasOpacitySupport : false,
useMSFilter : false,
useMSCurrentStyle : false,
slideshowIsSupported : false,
slideshowIsPlaying : false,
functionAfterFade : null,
isInitialLoad : false,
init : function (){
if($){
this.fadeContainer = $(this.fadeContainerId);
this.imageContainer = $(this.imageContainerId);
this.slideshowIsSupported = this.fadeContainer && this.imageContainer;
if(this.slideshowIsSupported){
this.allImages = this.images;
this.currentImages = this.images;
if(this.useImageText){
this.imageTextContainer = $(this.imageTextContainerId);
if(!this.imageTextContainer){
this.useImageText = false;
}
}
this.hasOpacitySupport = typeof this.fadeContainer.style.filter != "undefined" || typeof this.fadeContainer.style.opacity != "undefined";
this.useMSFilter = typeof this.fadeContainer.style.filter != "undefined";
this.useMSCurrentStyle = typeof this.fadeContainer.currentStyle != "undefined";
this.previousLink = $(this.previousLinkId);
this.previousLink.onclick = JaS.previousLinkClick;
this.nextLink = $(this.nextLinkId);
this.nextLink.onclick = JaS.nextLinkClick;
this.imageCounter = $(this.imageCounterId);
this.startSlideShowLink = $(this.startSlideShowId);
if(this.startSlideShowLink){
this.startSlideShowLink.style.display = "inline";
}
this.startSlideShowLink.onclick = JaS.startSlideShowClick;
this.stopSlideShowLink = $(this.stopSlideShowId);
if(this.stopSlideShowLink){
this.stopSlideShowLink.style.display = "none";
}
this.stopSlideShowLink.onclick = JaS.stopSlideshowClick;
if(this.allowDimmedBackground){
this.dimBackgroundOverlay = $(this.dimBackgroundOverlayId);
this.dimBackgroundLink = $(this.dimBackgroundId);
this.noDimBackgroundLink = $(this.noDimBackgroundId);
if(this.dimBackgroundOverlay && this.dimBackgroundLink && this.noDimBackgroundLink){
this.dimBackgroundLink.onclick = JaS.dimBackgroundClick;
this.noDimBackgroundLink.onclick = JaS.noDimackgroundClick;
this.noDimBackgroundLink.style.display = "none";
this.dimmingActivated = true;
}
}
if(this.useKeyboardShortcuts){
document.onkeydown = JaS.documentKeyDown;
}
this.thumbnailContainer = $(this.thumbnailContainerId);
if(this.useThumbnails && this.thumbnailContainer){
this.createThumbnails();
}
this.tagsContainer = $(this.tagsContainerId);
if(this.useTags && this.tagsContainer){
this.tagsSelectAll = $(this.tagsSelectAllId);
if(this.tagsSelectAll){
this.tagsSelectAll.onclick = JaS.tagsSelectAllClick;
this.createTagList();
}
}
this.isInitialLoad = true;
this.setImage();
this.isInitialLoad = false;
}
}
},
previousLinkClick : function(oEvent){
var oEvent = (typeof oEvent != "undefined")? oEvent : event;
JaS.preventDefaultEventBehavior(oEvent);
JaS.previousImage();
},
nextLinkClick : function(oEvent){
var oEvent = (typeof oEvent != "undefined")? oEvent : event;
JaS.preventDefaultEventBehavior(oEvent);
JaS.nextImage();
},
startSlideShowClick : function(oEvent){
var oEvent = (typeof oEvent != "undefined")? oEvent : event;
JaS.preventDefaultEventBehavior(oEvent);
JaS.startSlideshow();
},
stopSlideshowClick : function(oEvent){
var oEvent = (typeof oEvent != "undefined")? oEvent : event;
JaS.preventDefaultEventBehavior(oEvent);
JaS.stopSlideshow();
},
dimBackgroundClick : function(oEvent){
var oEvent = (typeof oEvent != "undefined")? oEvent : event;
JaS.preventDefaultEventBehavior(oEvent);
JaS.dimBackground();
},
documentKeyDown : function(oEvent){
var oEvent = (typeof oEvent != "undefined")? oEvent : event;
JaS.applyKeyboardNavigation(oEvent);
},
tagsSelectAllClick : function (oEvent){
JaS.tagsSelectAll = this.checked;
JaS.markAllTags();
},
noDimackgroundClick : function(oEvent){
var oEvent = (typeof oEvent != "undefined")? oEvent : event;
JaS.preventDefaultEventBehavior(oEvent);
JaS.noDimBackground();
},
setImage : function (){
if(this.currentImages.length > 0){
this.imageContainer.style.visibility = "visible";
this.imageSource = this.currentImages[this.imageIndex][0];
this.imageText = this.currentImages[this.imageIndex][1];
if(this.useFadingOut && (this.slideshowIsPlaying && this.useFadeForSlideshow) || (!this.slideshowIsPlaying && this.useFadeWhenNotSlideshow) && (this.useFadeAtInitialLoad && this.isInitialLoad || !this.isInitialLoad)){
this.fadeOut();
}
else{
this.displayImageCount();
this.imageContainer.setAttribute("src", (this.imagePath + this.imageSource));
this.setImageText();
this.previousLink.style.visibility = (this.imageIndex > 0)? "visible" : "hidden";
this.nextLink.style.visibility = (this.imageIndex < (this.currentImages.length - 1))? "visible" : "hidden";
if((this.useFadeAtInitialLoad && this.isInitialLoad || !this.isInitialLoad) && ((this.slideshowIsPlaying && this.useFadeForSlideshow) || (!this.slideshowIsPlaying && this.useFadeWhenNotSlideshow))){
this.fadeIn();
}
}
if(this.useThumbnails){
this.markCurrentThumbnail();
}
}
else{
this.imageSource = "";
this.imageText = "";
this.displayImageCount();
this.imageContainer.style.visibility = "hidden";
this.setImageText();
}
},
displayImageCount : function (){
if(this.imageCounter){
this.imageCounter.innerHTML = (((this.currentImages.length > 0)? this.imageIndex : -1) + 1) + " / " + this.currentImages.length;
}
},
nextImage : function (){
if(this.imageIndex < (this.currentImages.length - 1)){
++this.imageIndex;
this.setImage();
}
else if(this.slideshowIsPlaying){
this.stopSlideshow();
this.imageIndex = 0;
this.setImage();
}
},
previousImage : function (){
if(this.imageIndex > 0){
--this.imageIndex;
this.setImage();
}
},
setImageText : function (){
this.imageTextContainer.setAttribute("alt", this.imageText);
if(this.useImageText && typeof this.imageText == "string"){
this.imageTextContainer.innerHTML = this.imageText;
}
},
setDimBackgroundSize : function(){
var oDimBackground = this.dimBackgroundOverlay.style;
var intWidth = document.body.offsetWidth;
var intXScroll = (typeof window.pageXOffset != "undefined")? window.pageXOffset : document.body.scrollLeft;
var intHeight = (typeof window.innerHeight != "undefined")? window.innerHeight : (document.documentElement)? document.documentElement.clientHeight : document.body.clientHeight;
var intYScroll = (typeof window.window.pageYOffset != "undefined")? window.window.pageYOffset : (document.documentElement)? document.documentElement.scrollTop : document.documentElement.scrollTop;
oDimBackground.width = intWidth + intXScroll + "px";
oDimBackground.height = intHeight + intYScroll + "px";
},
dimBackground : function (){
this.setDimBackgroundSize();
this.dimBackgroundOverlay.style.display = "block";
this.noDimBackgroundLink.style.display = "inline";
},
noDimBackground : function (fromStopSlideshow){
this.dimBackgroundOverlay.style.display = "none";
this.noDimBackgroundLink.style.display = "none";
if(!fromStopSlideshow){
this.stopSlideshow();
}
},
startSlideshow : function (){
if(this.currentImages.length > 0){
this.startSlideShowLink.style.display = "none";
this.stopSlideShowLink.style.display = "inline";
this.slideshowIsPlaying = true;
this.fadeTimer = setTimeout("JaS.nextImage()", JaS.timeForSlideInSlideshow);
if(this.dimmingActivated && this.automaticallyDimBackgroundWhenSlideShow){
this.dimBackground();
}
}
},
stopSlideshow : function (){
if(this.currentImages.length > 0){
this.startSlideShowLink.style.display = "inline";
this.stopSlideShowLink.style.display = "none";
this.slideshowIsPlaying = false;
this.setFadeParams(false, 1, 0);
this.setFade();
clearTimeout(this.fadeTimer);
if(this.dimmingActivated && this.automaticallyDimBackgroundWhenSlideShow){
this.noDimBackground(true);
}
}
},
fadeIn : function (){
this.setFadeParams(true, 0, 1);
this.functionAfterFade = null;
this.fade();
if(this.slideshowIsPlaying){
this.functionAfterFade = "this.startSlideshow()";
}
},
fadeOut : function (){
this.setFadeParams(false, 1, 0);
this.functionAfterFade = "this.fadeOutDone()";
this.fade();
},
fadeOutDone : function (){
this.displayImageCount();
this.imageContainer.setAttribute("src", (this.imagePath + this.imageSource));
this.setImageText();
if(this.useFadingIn){
this.fadeIn();
}
else{
this.fadeLevel = 1;
this.setFade();
}
},
fade : function (){
if((this.fadingIn && this.fadeLevel < this.fadeEndLevel) || !this.fadingIn && this.fadeLevel > this.fadeEndLevel){
this.fadeLevel = (this.fadingIn)? this.fadeLevel + this.fadeIncrement : this.fadeLevel - this.fadeIncrement;
// This line is b/c of a floating point bug in JavaScript
this.fadeLevel = Math.round(this.fadeLevel * 10) / 10;
this.setFade();
this.fadeTimer = setTimeout("JaS.fade()", this.fadeInterval);
}
else{
clearTimeout(this.fadeTimer);
if(this.functionAfterFade){
eval(this.functionAfterFade);
}
}
},
setFade : function (){
if(this.useMSFilter){
this.fadeContainer.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity=" + (this.fadeLevel * 100) + ")";
}
else{
this.fadeContainer.style.opacity = this.fadeLevel;
}
},
setFadeParams : function (bFadingIn, intStartLevel, intEndLevel){
this.fadingIn = bFadingIn;
this.fadeLevel = intStartLevel;
this.fadeEndLevel = intEndLevel;
},
createThumbnails : function (){
this.thumbnailContainer.innerHTML = "";
this.thumbnailCollection = [];
var oThumbnailsList = document.createElement("ul");
var oListItem;
var oThumbnail;
var oCurrentImage;
for(var i=0; i 0){
this.markCurrentThumbnail();
}
if(this.slideshowIsPlaying){
this.stopSlideshow();
}
},
thumbnailClick : function (oEvent){
JaS.imageIndex = parseInt(this.getAttribute("id").replace(/\D*(\d+)$/, "$1"), 10);
JaS.setImage();
},
markCurrentThumbnail : function (){
if(this.currentThumbnailSelected){
this.currentThumbnailSelected.className = "";
// Sometimes, in IE, the image loses its reference to its parent
if(this.currentThumbnailSelected.parentNode){
this.currentThumbnailSelected.parentNode.className = "";
}
}
this.currentThumbnailSelected = this.thumbnailCollection[this.imageIndex];
this.currentThumbnailSelected.className = "selected";
this.currentThumbnailSelected.parentNode.className = "selected-parent";
},
createTagList : function (){
var strCurrentTag;
var arrCurrentTag;
var oRegExp;
for(var i=0; i