/*
This script is NOT freely available to copy or to distribute.
Copyright Joonas Viljanen 2010.
quickgallery.jv2.net
*/
var extraWidth = 30;
var extraHeight = 70;
var windowMargin = 30;
var slideShowAutoStart = false;
var slideShowDuration = 6000;
var slideShowPlay = '';
var slideShowPause = '';
var items = new Array;
var el = new Array;
var currentImage;
var sshowTimer;
var sshowOn;
var dimensions = windowDimensions();
function addOverlay()
{
dimensions = windowDimensions();
addElement('div','overlay');
el['overlay'].style.width = (dimensions['vWidth']+dimensions['sLeft'])+"px";
el['overlay'].style.height = (dimensions['vHeight']+dimensions['sTop'])+"px";
addElement('div','imgViewer','overlay');
el['imgViewer'].style.width = "100px";
el['imgViewer'].style.height = "100px";
var topMargin = Math.floor((dimensions['vHeight']+dimensions['sTop']-100)/2);
el['imgViewer'].style.marginTop = topMargin+'px';
addElement('div','imgClose','imgViewer');
addElement('div','imgCloseButton','imgClose');
el['imgCloseButton'].innerHTML = "X";
clickEventAttach('imgCloseButton',closeImageViewer);
el['imgDiv'] = document.createElement('div');
showLoading();
el['imgViewer'].appendChild(el['imgDiv']);
document.body.appendChild(el['overlay']);
if(document.attachEvent)
window.attachEvent('onresize',function(e){resizeViewer();});
else if(document.addEventListener)
window.addEventListener('resize',function(e){resizeViewer();},false);
else
window.onresize = function(e){resizeViewer();};
if(document.attachEvent)
document.attachEvent('onkeydown',function(e){eventKeyPress(e);});
else if(document.addEventListener)
document.addEventListener('keydown',function(e){eventKeyPress(e);},false);
else
document.onkeydown = function(e){eventKeyPress(e);};
};
function addElement(type,id,parentEl)
{
el[id] = document.createElement(type);
el[id].setAttribute('id',id);
if(parentEl != null)
el[parentEl].appendChild(el[id]);
}
function showLoading()
{
el['imgDiv'].setAttribute('id','imgDiv');
addElement('div','imgLoading');
el['imgDiv'].appendChild(el['imgLoading']);
}
function getGalleryItems()
{
var links = document.getElementsByTagName("a");
for(var i=0; i 0)
{
clickEventAttach('imgPrevious',previousImage);
el['imgPrevious'].style.display = 'block';
}
else
{
el['imgPrevious'].style.display = 'none';
}
resizeViewer();
// set img attributes
el['img'].src = loadImg.src;
el['img'].style.display = "block";
// set info values
if(items[i].title != undefined)
el['imgTitle'].innerHTML = items[i].title;
if(items[i].caption != undefined)
el['imgCaption'].innerHTML = items[i].caption;
if(items[i].author != undefined)
el['imgAuthor'].innerHTML = items[i].author;
el['imgCount'].innerHTML = (i+1)+'/'+items.length;
// remove loading and show image, nav and info
el['imgDiv'].removeChild(el['imgLoading']);
el['imgDiv'].appendChild(el['imgShow']);
el['imgDiv'].appendChild(el['imgNav']);
el['imgViewer'].appendChild(el['imgInfo']);
if(slideShowAutoStart && !sshowOn)
{
sshowOn = true;
slideShowButtonPause();
sshowTimer = setTimeout("nextSlide()",slideShowDuration);
}
}
href = items[i].href.replace(/\%/g,'%25').replace(/\#/g,'%23');
loadImg.src = href;
}
}
function clearImage()
{
el['imgDiv'].removeChild(el['imgNav']);
el['imgDiv'].removeChild(el['imgShow']);
el['imgViewer'].removeChild(el['imgInfo']);
showLoading();
}
function previousImage()
{
if(sshowOn)
stopSlideshow();
clearImage();
currentImage--;
showImg();
return false;
}
function nextImage()
{
if(sshowOn)
stopSlideshow();
clearImage();
currentImage++;
showImg();
return false;
}
function nextSlide()
{
clearImage();
currentImage++;
showImg();
if(sshowOn && currentImage < items.length-1)
sshowTimer = setTimeout("nextSlide()",slideShowDuration);
return false;
}
function startSlideshow()
{
sshowOn = true;
slideShowButtonPause();
sshowTimer = setTimeout("nextSlide()",3000);
}
function stopSlideshow()
{
sshowOn = false;
clearTimeout(sshowTimer);
slideShowButtonPlay();
}
function slideShowButtonPause()
{
clickEventRemove('imgSlideShow',startSlideshow);
clickEventAttach('imgSlideShow',stopSlideshow);
el['imgSlideShow'].innerHTML = slideShowPause;
el['imgSlideShow'].removeAttribute('class');
el['imgSlideShow'].setAttribute('class','playing');
}
function slideShowButtonPlay()
{
clickEventRemove('imgSlideShow',stopSlideshow);
clickEventAttach('imgSlideShow',startSlideshow);
el['imgSlideShow'].innerHTML = slideShowPlay;
el['imgSlideShow'].removeAttribute('class');
el['imgSlideShow'].setAttribute('class','stopped');
}
function closeImageViewer()
{
if(sshowOn)
stopSlideshow();
document.body.removeChild(el['overlay']);
el = new Array;
document.body.style.overflow = "auto";
}
function getParameter(el,parameter)
{
if(el.getAttribute("params") != null)
{
var parameters = el.getAttribute('params');
var value;
var parameterArray = parameters.split(',');
var compareString = parameter+'=';
var compareLength = compareString.length;
for (var i = 0; i < parameterArray.length; i++) {
if (parameterArray[i].substr(0, compareLength) == compareString) {
var currentParameter = parameterArray[i].split('=');
value = currentParameter[1];
break;
}
}
if (!value) return false;
else return unescape(value);
}
else
return null;
}
function clickEventAttach(id,functionName)
{
if(el[id].attachEvent)
el[id].attachEvent("onclick", functionName);
else
el[id].addEventListener("click", functionName , false);
}
function clickEventRemove(id,functionName)
{
if(el[id].detachEvent)
el[id].detachEvent("onclick", functionName);
else
el[id].removeEventListener("click", functionName , false);
}
function resizeViewer()
{
dimensions = windowDimensions();
el['overlay'].style.width = (dimensions['vWidth']+dimensions['sLeft'])+"px";
el['overlay'].style.height = (dimensions['vHeight']+dimensions['sTop'])+"px";
var newWidth = items[currentImage].width;
var newHeight = items[currentImage].height;
if( (dimensions['vHeight']-windowMargin) < (newHeight+ extraHeight) )
{
var newHeight = dimensions['vHeight'] - extraHeight - windowMargin;
var sizeRatio = (newHeight / items[currentImage].height)
var newWidth = Math.floor(sizeRatio * items[currentImage].width)
}
if( (dimensions['vWidth']-windowMargin) < (newWidth + extraWidth) )
{
var newWidth = dimensions['vWidth'] - extraWidth - windowMargin;
var sizeRatio = (newWidth / items[currentImage].width)
var newHeight = Math.floor(sizeRatio * items[currentImage].height);
}
document.body.style.overflow = "hidden";
var divWidth = newWidth + extraWidth;
var divHeight = newHeight + extraHeight;
var topMargin = dimensions['sTop'] + Math.floor((dimensions['vHeight']-divHeight)/2);
el['img'].width = newWidth;
el['img'].height = newHeight;
el['imgViewer'].style.width = divWidth+'px';
el['imgViewer'].style.height = divHeight+'px';
el['imgViewer'].style.marginTop = topMargin+'px';
}
function windowDimensions()
{
var dimensions = new Array;
if(window.innerWidth)
{
dimensions['vWidth'] = window.innerWidth;
dimensions['vHeight'] = window.innerHeight;
dimensions['sLeft'] = window.pageXOffset;
dimensions['sTop'] = window.pageYOffset;
}
else if (document.documentElement.clientHeight)
{
dimensions['vWidth'] = document.documentElement.clientWidth;
dimensions['vHeight'] = document.documentElement.clientHeight;
dimensions['sLeft'] = document.documentElement.scrollLeft;
dimensions['sTop'] = document.documentElement.scrollTop;
}
else
{
dimensions['vWidth'] = document.body.clientWidth;
dimensions['vHeight'] = document.body.clientHeight;
dimensions['sLeft'] = document.body.scrollLeft,
dimensions['sTop'] = document.body.scrollTop
}
return dimensions;
}
function eventKeyPress(e)
{
if(e == null)
var keycode = event.keyCode;
else
var keycode = e.which;
if(keycode == 27)
closeImageViewer();
else if(keycode == 39)
nextImage();
else if(keycode == 37)
previousImage();
}